1、定义层面
Map 接口定义映射,存储一组键值对的映射关系。
Set 接口定义集合,存储一组互不相同的元素,该接口继承了 Collection 接口。
2、Map 接口的概念和常用方法
Map 接口存储一组键值对的映射关系,映射中的每个键对应一个值。映射中不能有重复的键,否则会出现一个键对应多个值的情况,这违背了映射的定义。
(1)放置键值对
放置键值对的方法有 put 和 putAll,其中 put 一次放置一个键值对,putAll 一次将另一个映射中的键值对全部添加道当前映射中。在映射中放置键值对时,如果映射中没有对应的键,则在映射中新建一个键值对,否则用新的键值对覆盖原来的相同键的键值对。
(2)删除键值对
删除键值对的方法有 remove 和 clear,其中 remove 删除指定键的键值对,clear 删除当前映射中的全部键值对。
(3)判断包含键或值
判断包含键或值的方法有 containsKey 和 containsValue,其中 containsKey 判断映射中是否包含指定的键,containsValue判断映射中是否包含指定的值。
(4)根据键获得值
根据键获得值得方法有 get,该方法返回映射中指定键的值。
(5)获得键或键值对的集合
获得键或键值对的集合的方法有 entrySet 和 keySet,其中 entrySet 返回映射的所有键值对的集合,keySet 返回映射的所有键的集合。
(6)获得值的容器
获得值的容器的方法有 values,该方法返回映射的所有值的容器。
(7)其他方法
方法 isEmpty 判断当前映射是否为空(即不包含键值对),方法 size 返回映射中的键值对数目。
(8)Map 接口的实现类 HashMap、Hashtable 和 TreeMap
- HashMap 和 Hashtable
HashMap 类是散列映射,通过散列函数计算键对应的存储位置,因此可以快速地完成放置键值对、删除键值对、根据键获得值的 *** 作。
//初始化方法
Mapchange=new HashMap()
{
{
put('I',1);
put('V',5);
put('X',10);
put('L',50);
put('C',100);
put('D',500);
put('M',1000);
}
};
JDK 1.8 之前的 HashMap 的底层通过数组和链表实现,如果出现冲突则通过拉链法解决冲突。JDK 1.8 在解决冲突时的实现有较大变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。
Hashtable 类是散列表,其功能和 HashMap 相似。以下是 HashMap 和 Hashtable 的部分区别。
HashMap 不是线程安全的,Hashtable 的大多数方法用关键字 synchronized 修饰,因此 Hashtable 是线程安全的。在不需要保证线程安全的情况下,HashMap 的效率高于 Hashtable。
HashMap 允许键或值为 null,只能有一个键为 null,可以有一个或多个键对应的值为 null,Hashtable 不允许键或值为 null。
从 JDK 1.8 开始,HashMap 在链表长度大于阈值(默认为 8)时,将链表转化为红黑树以减少搜索时间,Hashtable 没有这样的机制。
- TreeMap
TreeMap 是有序映射,键可以使用 Comparable 接口或 Comparator 接口排序。
TreeMap 的底层实现是红黑树,通过红黑树维护映射的有序性。由于要维护映射的有序性,因此 TreeMap 的各项 *** 作的平均效率低于 HashMap,但是 TreeMap 可以按照顺序获得键值对。
3、Set 接口的定义和常用方法
Set 接口存储一组互不相同的元素,一个集合中不存在两个相等的元素。
Set 接口继承了 Collection 接口,没有引入新的方法或常量,只是规定其实例不能包含相等的元素。
(1)Set 接口的实现类 HashSet 和 TreeSet
- HashSet
HashSet 类是散列集合,其底层实现基于 HashMap。当对象加入散列集合时,需要判断元素是否重复,首先通过方法 hashCode 计算对象的散列码检查是否有对象具有相同的散列码,如果没有相同的散列码则没有重复元素,否则再通过方法 equals 检查是否有相等的对象。
根据散列约定,如果两个对象相同,它们的散列码一定相同,因此如果在子类中重写了 equals 方法,必须在该子类中重写 hashCode 方法,以保证两个相等的对象对应的散列码是相同的。
- TreeSet
TreeSet 类是有序集合,其底层实现基于 TreeMap。和 TreeMap 相似,TreeSet 可以使用 Comparable 接口或 Comparator 接口对元素排序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)