Map
# 前言
Java
集合可分为Collection
和Map
两种体系:
Collection
接口:单列数据,定义了存取一组对象的方法的集合List
:元素有序、可重复的集合ArrayList
、LinkedList
、Vector
Set
:元素无序、不可重复的集合HashSet
、LinkedHashSet
、TreeSet
Map
接口:双列数据,保存具有映射关系“key-value对
”的集合,也称为键值对。HashMap
、LinkedHashMap
、TreeMap
、Hashtable
、Properties
前面我们已经学完Collection
体系,接下来学习Map
体系。
# Map接口继承树
从图中,得知SortedMap
和TreeMap
是有序的。
除了SortedMap是接口,其他都是实现类。
# Map接口概述
- Map与Collection并列存在。用于保存具有映射关系的数据:key-value,所以也叫键值对结构。
- Map 中的key 和value 都可以是任何引用类型的数据
- Map 中的key 用Set来存放,不允许重复,即同一个Map 对象所对应的类,须重写hashCode()和equals()方法
- 常用String类作为Map的“键”
- key 和value 之间存在单向一对一关系,即通过指定的key 总能找到唯一的、确定的value
- Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中,
HashMap
是Map 接口使用频率最高的实现类
# 结构图示例
# 常用方法
添加、删除、修改操作:
Object put(Object key,Object value)
:将指定key-value添加到(或修改)当前map对象中void putAll(Map m)
: 将m中的所有key-value对存放到当前map中Object remove(Object key)
:移除指定key的key-value对,并返回valuevoid clear()
:清空当前map中的所有数据
元素查询的操作:
Object get(Object key)
:获取指定key对应的valueboolean containsKey(Object key)
:是否包含指定的keyboolean containsValue(Object value)
:是否包含指定的valueint size()
:返回map中key-value对的个数boolean isEmpty()
:判断当前map是否为空boolean equals(Object obj)
:判断当前map和参数对象obj是否相等
元视图操作的方法:
Set keySet()
:返回所有key构成的Set集合Collection values()
:返回所有value构成的Collection集合Set entrySet()
:返回所有key-value对构成的Set集合
# 练习
@Test
public void test1() {
Map map = new HashMap();
System.out.println("map中所有的key:");//HashSet
Set keys = map.keySet();
for (Object key : keys) {
System.out.println(key);
}
System.out.println("map中所有的value:");
Collection values = map.values();
for (Object value : values) {
System.out.println(value);
}
System.out.println("map所有的映射关系:");
Set mappings = map.entrySet();
for (Object mapping : mappings) {
Map.Entry entry = (Map.Entry) mapping;
System.out.println("key是:" + entry.getKey() + ",value是:" + entry.getValue());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 总结
Map:双列数据,存储key-value对的数据
- HashMap:作为Map的主要实现类;线程不全的,效率高;存储null的key和value。JDK7即之前底层是数组+链表,JDK8及以上底层是数组+链表+红黑树。
- LinkedHashMap:保证在遍历map元素时,添加了一对指针,指向前一个元素和后一个元素。对于频繁的遍历操作,执行效率要高于HashMap。
- TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序。底层使用红黑树结构。
- Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value。
- Properties:常用来处理配置文件。key和value都是String类型。
面试题或等下我们要学习的内容:
- 1、HashMap的底层实现原理?
- 2、HashMap和hashtable的异同?
- 3、Currenthashmap与Hashtable异同?(暂时不讲)
帮我改善此页面 (opens new window)
上次更新: 2020/12/27, 05:00:47