Map接口
Map接口
存储双列数据,存储key-value对的数据,类似于函数y = f(x)
Map接口继承树

实现类
- Map
- HashMap
- LinkedHashMap
- TreeMap
- Hashtable
- Properties
- HashMap
说明
-
HashMap:作为Map的主要实现类,线程不安全,效率高,可以存储null的key和value
-
LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。对于频繁的遍历操作,此类的执行效率高于HashMap
原因:在原有的HashMap底层结构的基础上,添加了一对指针,指向前一个和后一个元素
-
TreeMap:保证按照添加的key-value对进行排序,实现排序遍历,此时考虑key的自然排序或定制排序(底层使用红黑树)
-
Hashtable:作为古老的实现类,线程安全,效率低,不可以存储null的key和value
-
Properties:常用来处理配置文件。key和value都是String类型
HashMap底层
- jdk7:数组 + 链表
- jdk8:数组 + 链表 + 红黑树
Map结构的理解

-
key:无序的,不可重复的,使用Set存储所有的key
在HashMap中,要求key所在的类要重写equals()和hashCode()
-
value:无序的,可重复的
value所在类要求重写equals()
-
Entry:一个键值对(key - value)构成一个entry对象,key和value相当于两个属性
无序的,不可重复的,使用Set存储所有的entry
Map中常用的方法
-
put(Object key , Object value)
将指定的key-value添加到(或修改)当前map对象中
HashMap map = new HashMap(); //添加操作 map.put("AA",123); map.put("BB",79); map.put("CC",56); map.put("DD",123); //修改操作 map.put("AA",87);//现有的key相同,就要替换原key中的值为新的value值 System.out.println(map);
-
putAll(Map m)
将m中所有的key-value对存放在当前的map中
HashMap m = new HashMap(); map.put("Ann",90); map.put("Jack",80); map.put("Lisa",70); map.putAll(m); System.out.println(map);//{AA=87, BB=79, CC=56, DD=123, Ann=90, Jack=80, Lisa=70} -
remove(Object key)
移除指定key的key-value对,并返回value
System.out.println(map.remove("Ann"));//90 System.out.println(map);//{AA=87, BB=79, CC=56, DD=123, Jack=80, Lisa=70} -
clear()
清空当前map中所有的数据,与map = null 操作不同
数据清理掉,对象依旧存在
此时map的长度为0
map.clear(); System.out.println(map);//{} -
get(Object key)
获取指定key对应的value
HashMap map = new HashMap(); map.put("AA",123); map.put("BB",79); map.put("CC",56); map.put("DD",123); System.out.println(map.get("AA"));//123 -
containKey(Object key)
是否包含指定的key
System.out.println(map.containsKey("AA"));//true -
containValue(Object value)
是否包含指定的value
如果map中有多个相同的value,只要找到第一个,就会返回true
System.out.println(map.containsValue(123));//true -
size()
返回map中key-value对的个数
System.out.println(map.size());//4 -
isEmpty()
判断当前map是否为空
System.out.println(map.isEmpty());//false -
equals(Object obj)
判断当前map和参数对象obj是否相等
HashMap map1 = new HashMap(); map1.put("AA",123); map1.put("BB",79); map1.put("CC",56); map1.put("DD",123); System.out.println(map.equals(map1));//true -
keySet()
返回所有的key构成的Set集合
HashMap map = new HashMap(); map.put("AA",123); map.put("BB",79); map.put("CC",56); map.put("DD",123); System.out.println(map.keySet());//[AA, BB, CC, DD] Set set = map.keySet(); Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } -
values()
遍历所有的value集
Collection values = map.values(); Iterator iterator1 = values.iterator(); while (iterator1.hasNext()){ System.out.println(iterator1.next()); } //123 //79 //56 //123 -
entrySet()
遍历所有的key-value
entrySet集合中的元素都是entry
Set set1 = map.entrySet(); Iterator iterator2 = set1.iterator(); while (iterator2.hasNext()){ System.out.println(iterator2.next()); }
总结
- 添加:put(Object key , Object value)
- 删除:remove(Object key)
- 修改:put(Object key , Object value)
- 查询:get(Object obj)
- 长度:size()
- 遍历:keySet()/values()/entrySet()

浙公网安备 33010602011771号