【集合详解】Java集合总结(中)-Map家族

接上文,本篇博客我们接着谈论有关集合的内容。
java所有的集合分成三大类。Set类似罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复。List集合非常想一个数组,可以记住每次添加元素的顺序,且List的长度可变。Map集合也想一个罐子,只是它里面的每个数据都有两个值组成。
这里写图片描述

List根据索引访问,Map根据Key访问其value,Set只能根据本身访问,所以不能重复。

Map家族

首先先看Map体系的继承树。
这里写图片描述

Hashtable 和 HashMap

①Hashtable是线程安全的Map实现,但HashMap线程不安全,即HashMap性能稍高一点。但多个线程访问一个map对象时,用hashtable好。
②Hashtable不允许使用null作为key和value。否则会报错“NullPointerException”。但HashMap可以使用null作为key(最多一个null),或Value(可有多个null)

性能分析

①Hashtable 和 HashMap相比尽管Hashtable 线程安全,但一般也会采用性能稍高一点的HashMap,并且需要保证线程安全时,可以结合工具类Collections.
PS:Collections类,提供了大量方法对集合元素进行排序,查询,和修改等操作。还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法。

②TreeMap比HashMap和HashTable慢(尤其是插入和删除),因为TreeMap底层采用红黑树管理key-value对。但用TreeMap使对象总是处于有序状态,也是其优势。

③LinkedHashMap比HashMap慢一点,因为它需要维护链表来保持map中的key-value时的添加顺序。IdentityHashMap性能没有特别出色的地方,与hashmap基本相似的实现。只是它使用的==而不是equals()来判断元素相等。EnumMap性能最好,但只能使用同意而枚举类的枚举值作为key。

总结:

本文主要总结了Java集合中map家族。以及部分map实现类的使用场景和其性能对比。至于Map的Hash算法,虽然博客中没有提到,但对于理解其他基于hash的实现类都很有帮助。

猜你喜欢

转载自blog.csdn.net/u010176014/article/details/52123170