廖雪峰的视频不全,以下是疯狂Java关于Map的讲解
1.Map定义
Map是一种键值映射表,可以通过key快速查找value,同python的dict。key不允许重复,value可以重复。
Map 集合里保存这两组值,一组值保存Map里的key,一组保存Map里的value,key和value都可以是任何引用类型的数据。
Map确实包含了一个keySet()方法,用于返回key组成的set集合。value类似于一个List,可以重复,通过key来查找。
常用方法:
- Object put(Object key, Object value):添加一个key-value对,如果当前Map中已有一个与该key相等的key-value对,则新的key-value对会覆盖原来的key-value对。
- void clear():删除该Map对象中的所有key-value对。
Map map = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
System.out.println(map);
map.clear();
System.out.println(map);
* boolean containsKey(Object key):查询Map中是否包含指定的key,如果包含返回true。
* boolean containsValue(Object value):查询Map是否包含一个或多个value,如果包含则返回true。
```#java
Map map = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
System.out.println("map.containsKey(\"宁波\"):"+map.containsKey("宁波"));
System.out.println("map.containsKey(\"厦门\"):"+map.containsKey("厦门"));
System.out.println("map.containsValue(\"0574\"):"+map.containsValue("0574"));
System.out.println("map.containsValue(\"0000\"):"+map.containsValue("0000"));
```
* Object get(Object key):返回指定key所对应的value;如果Map中不包含这个key,返回null。
* boolean isEmpty():查询该Map是否为空(即不包含任何key-value对),如果为空则返回true。
* void putAll(Map m):将指定Map中的key-value对复制到本Map中。
* int size():返回该Map里的key-value对的个数。
```#java
Map map = new HashMap();
Map map2 = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
System.out.println(map.get("宁波"));
System.out.println(map.get("厦门"));
System.out.println(map.isEmpty());
System.out.println(map2.isEmpty());
map2.putAll(map);
System.out.println(map2.toString()+"\t"+map2.size());
```
* Object remove(Object key):从Map中删除指定的key-value对,返回被删除key所关联的value,如果key不存在,返回null。
* boolean remove(Object key, Object value):Java8新增,删除指定key、value所对应的key-value对。如果从该Map中删除该key-value对,返回true;否则,返回false。
```#java
Map map = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
System.out.println(map.remove("宁波"));
System.out.println(map.remove("厦门"));
System.out.println(map.remove("湖州","0572"));
System.out.println(map.remove("嘉兴","1234"));
```
* Set keySet():返回该Map中所有key组成的集合。
* Collection values():返回该Map里所有value组成的Collection。
* Set entrySet():返回Map中包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map的内部类)。
```#java
Map map = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
/**
* 遍历Map:
* * 用for-each循环:
* * 循环key:keySet()
* * 循环key和value: entrySet()
*/
for(Object k:map.keySet()){
System.out.print(k+"=");
System.out.print(map.get(k)+"\t");
}
System.out.println();
System.out.println("value列表:"+map.values());
for(Object m:map.entrySet()){
System.out.print(m+"\t");
}
```
Map中包含一个内部类Entry,该类封装了一个key-value对。Entry包含如下三个方法:
* Object getKey():返回该Entry里包含的key值。
* Object getValue():返回该Entry里包含的value值。
* Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。
```#java
Map map = new HashMap();
map.put("杭州", "0571");
map.put("湖州", "0572");
map.put("嘉兴", "0573");
map.put("宁波", "0574");
Iterator
> it = map.entrySet().iterator();
while (it.hasNext()){
Map.Entry