一、引言
Map是Java中非常重要的数据结构之一,它提供了键值对的存储方式,能够高效地进行数据的查找和操作。在实际的软件开发中,Map集合被广泛应用于各种场景,例如存储配置信息、缓存数据、表示映射关系等。深入理解和掌握Map集合的特性和用法,对于编写高效、优秀的Java程序至关重要。
二、存储特点
- 以键值对的形式存储数据
- 键(key): 无序,无下标,元素不可重复
- 值(value): 无序,无下标,元素可以重复
三、常用实现类
- HashMap
- JDK1.2 底层哈希表实现 线程不安全,效率高
- LinkedHashMap
- JDK1.2 是HashMap的子类,底层哈希表实现 线程不安全,效率高
- TreeMap
- JDK1.2 是SortedMap的实现类,底层红黑树实现 线程不安全,效率高
- Hashtable
- JDK1.0 底层哈希表实现 线程安全,效率低
- Properties
- JDK1.0 是Hashtable的子类,底层哈希表实现 线程安全,效率低
四、创建
- 建议使用多态
Map<键的泛型,值的泛型> 集合名=new 实现类名<>();
五、常用方法
K: 键
V: 值
- V put(K,V):向集合中添加一个键值对
- 如果键已经存在,则进行值的覆盖
- int size(): 获取集合长度
- boolean containsKey(K): 判断集合是否包含指定键
- boolean containsValue(V): 判断集合是否包含指定值
- V get(K): 根据键获取值
六、遍历
- 键遍历
- Set<K的泛型> keySet(): 获取集合所有的键放入Set集合返回
//先获取所有的键
Set<String> set1 = map.keySet();
//遍历键
set1.forEach(k -> System.out.println(k + " " + map.get(k)));
- 值遍历
- Collection<V的泛型> values(): 获取集合所有的值放入Collection集合返回
//获取所有的值
Collection<String> coll = map.values();
//遍历值
for (String s : coll) {
System.out.println(s);
}
- 键值对遍历
- Set< Map.Entry<K的泛型,V的泛型> > entrySet(): 将所有的键值对对象放入Set集合返回
- entry对象.getKey(): 获取entry对象中的键
- entry对象.getValue():获取entry对象中的值
//获取到所有的entry对象
Set<Map.Entry<String, String>> set2 = map.entrySet();
//遍历entry对象
set2.forEach(entry-> System.out.println(entry.getKey()+","+entry.getValue()));
- 自遍历forEach
- 集合名.forEach(BiConsumer接口实现类对象)
System.out.println("自遍历-->匿名内部类:");
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String k, String v) {
System.out.println(k+" , "+v);
}
});
System.out.println("自遍历-->lambda:");
map.forEach((k,v)->System.out.println(k+" , "+v));
七、使用
- 除去TreeMap之外, 如果键为自定义类型,则必须重写hashCode和equals方法才能实现去重
- HashMap可以存放null值,键只能有一个null,值可以存在多个null
- LinkedHashMap在HashMap的基础上可以保证元素存入和取出的顺序一致
- TreeMap可以根据键进行默认的升序排序
- 如果键为自定义类型,则需要自定义排序规则,方式与TreeSet一致
- 键不可为null,否则排序会导致空指针
- 仍然在compareTo或者compare方法返回值为0时去重
- Hashtable无法存放null值
- Properties只能存放String类型的数据
- 不推荐使用多态
- 无法使用泛型
- setProperty(String,String): 向集合中添加一个键值对
- String getProperty(String): 根据键获取值
- load(输入流): 通过输入流将配置文件的内容读取到集合中
八、结语
Map集合作为Java编程中的重要组成部分,对于我们处理各种复杂的数据结构具有重要意义。在实际的项目开发中,合理高效地运用Map集合,将极大地提升我们程序的性能和可维护性