import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* Map接口
* Map接口定义的集合又称查询表,用于存储"Key-Value"映射对。Key是Value的索引
* Map要求Key不允许重复,是否重复取决于Key元素
* equals方法比较的结果
*
* 常用实现类;java.util.HashMap
* HashMap:散列表,以散列算法实现的Map
*
*/
public class MapDemo {
public static void main(String[] args) {
Map<String,Integer> map=
new HashMap<String,Integer>();
/**
* 向Map中存放元素的put方法
* V put(K key,V value)
* 将Key-Value对存入Map,如果在集合中已经包含该Key,
* 则操作将替换该Key所对应的Value,返回值为该Key原来所对应的Value(如果没有则返回null)
*/
map.put(
"语文",
89);
map.put(
"数学",
56);
map.put(
"化学",
54);
map.put(
"体育",
89);
map.put(
"语文",
98);
System.out.println(map);
/**
* 尽量不要使用基本类型去接收返回值,以为返回值为null时,
* 触发自动拆箱时会引起空指针异常
*/
Integer num=map.put(
"美术",
99);
System.out.println(num);
System.out.println(map);
Integer num1=map.put(
"美术",
99);
System.out.println(num1);
/**
* 从Map中获取元素
* -V get(Object key)
* 返回参数key所对应的Value对象,如果不存在则返回null
*/
Integer num2=map.get(
"体育");
System.out.println(num2);
Integer num3=map.get(
"大海");
System.out.println(num3);
/**
* V remove(Object key)
* 将给定的Key对应的键值对从map中删除,返回值为该key对应的value值
*/
Integer num4=map.remove(
"美术");
System.out.println(num4);
System.out.println(map);
/**
* containsKey()方法
* 判断某个Key是否在Map中存在(参考equals比较结果)
* boolean containKey(Object key)
* 若Map中包含给定的Key则返回true,否则返回false
* boolean containValue(V v)
* 若Map中包含给定的Value则返回true,否则返回false
*/
boolean containsKey=map.containsKey(
"化学");
System.out.println(containsKey);
System.out.println(map.containsKey(
"大大"));
System.out.println(map.containsValue(
10));
/**
* 遍历Map
* 遍历key:Set KeySet()该方法会将当前Map中所有的Key存入一个Set集合后返回
* 遍历Value(不常用)
* 遍历Key-Value
*/
Map<String,Double> maps=
new HashMap<String,Double>();
maps.put(
"a",
1.2);
maps.put(
"b",
15.3);
maps.put(
"c",
1.6);
maps.put(
"d",
1.2);
System.out.println(maps);
Set<String> keyset=maps.keySet();
for(String key:keyset) {
System.out.println(
"Key:"+key);
}
/**
* 遍历每一组键值对
* set entrySet()
* Entry是Map的内部类,其每一个实例用于表示Map中一组键值对
* 常用方法:getKey,getValue,这两个方法分别用于获取该组键值对中的Key与value
*
* entrySet方法会将当前maps中每一组键值对以一个Entry实例的形式存入Set集合后返回
*/
Set<Entry<String,Double>> entryset=maps.entrySet();
for(Entry<String,Double> e:entryset) {
String key=e.getKey();
Double value=e.getValue();
System.out.println(key+
":"+value);
}
/**
* 遍历所有的value
* Collection values()
* 将当前Map中所有的value存入一个集合后返回
*/
Collection<Double> values=maps.values();
for(Double d:values) {
System.out.println(d);
}
/**
* LinkdedHashMap类
* 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,
* 该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。
*/
Map<String,Integer> link=
new LinkedHashMap<String,Integer>();
link.put(
"da",
12);
link.put(
"ha",
13);
link.put(
"hei",
15);
System.out.println(link);
}
}