Java 集合深入理解:Map

Map概述

public interface Map<K,V> {}

Java 中的 Map 接口 是和 Collection 接口 同一等级的集合根接口,它 表示一个键值对 (key-value) 的映射。

一个 Map 中,任意一个 key 都有唯一确定的 value 与其对应,这个 key-value 的映射就是 map。

Map 中元素的顺序取决于迭代器迭代时的顺序,有的实现类保证了元素输入输出时的顺序,比如说 TreeMap;有的实现类则是无序的,比如 HashMap。

Map 接口提供了三种角度来分析 Map:分别是KeySet,Values和Entry

1,KeySet

KeySet 是一个 Map 中键(key)的集合,以 Set 的形式保存,不允许重复,因此键存储的对象需要重写 equals() 和 hashCode() 方法。

可以通过 Map.keySet() 方法获得。

Set<K> keySet();
2,Values

Values 是一个 Map 中值 (value) 的集合,以 Collection 的形式保存,因此可以重复。

通过 Map.values() 方法获得。

Collection<V> values()
3,Entry

Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射

interface Entry<K,V> {...}

在这里插入图片描述

Entry中的方法
  1. K getKey();获取键
  2. V getValue();获取值
  3. V setValue(V value);修改值
  4. int hashCode(); 返回这个 Entry 的哈希值
  5. boolean equals(Object o); 对比 key-value 是否相等

通过 Map.entrySet() 方法获得的是一组 Entry 的集合,保存在 Set 中,所以 Map 中的 Entry 也不能重复。

Set<Map.Entry<K, V>> entrySet();

Map 的实现类

在这里插入图片描述

Map 的实现类主要有 4 种:

  1. Hashtable,继承于Dictionary,可以认为是遗留的类,线程安全
  2. HashMap,与hashtable相同,只不过线程不安全,也体现出了hashmap速度更快
  3. TreeMap,有序的映射
  4. LinkedHashMap,结合 HashMap 和 TreeMap 的优点,有序的同时效率也不错

总结

  • 没有重复的key,但可以有重复的value
  • key,value 都可以是任何引用类型的数据,包括 null

注意:
可以使用 Map 作为 Map 的值,但禁止使用 Map 作为 Map 的键。因为在这么复杂的 Map 中,equals() 方法和 hashCode() 比较难定义。

另一方面,你应该尽量避免使用“可变”的类作为 Map 的键。如果你将一个对象作为键值并保存在 Map 中,之后又改变了其状态,那么 Map 就会产生混乱,你所保存的值可能丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值