HashMap、HashSet、TreeMap面试

一、HashMap

1.HashMap是基于   哈希表的   Map接口的    非同步   实现。此实现提供所有可选的映射操作,

2.并允许使用null值和null键(HashMap最多只允许一条记录的键为null,允许多条记录的值为null。)

3.此类不保证映射的顺序,特别是它不保证该顺序恒久不变

4.HashMap中不允许出现重复的键(Key)

5.Hashmap是非线程安全的,如果多个线程同时访问一个HashMap,可能会导致数据不一致,所以当其中至少一个线程从结构上(指添加或者删除一个或多个映射关系的任何操作)修改了,则必须保持外部同步,以防止对映射进行意外的非同步访问。

6.其迭代器是fail-fast的

7.HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体,(JDK1.8增加了红黑树部分,会将时间复杂度从O(n)降为O(logn))。

红黑树 
即使负载因子和Hash算法设计的再合理,也免不了会出现拉链过长的情况,一旦出现拉链过长,则会严重影响HashMap的性能。于是,在JDK1.8版本中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除、查找等算法。

二、HashSet

HashSet中的数据不是key-value键值对,其只是单值,虽然其借助与HashMap来实现,但是其只是将值作为key来存入HashMap中,因为HashMap中的值是key-value键值对的,所以每个HashSet存储到HashMap的数据对应的value值只是一个new Object()对象,

三、TreeMap

TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。 
TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。 
TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。 
TreeMap 实现了Cloneable接口,意味着它能被克隆。

TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序(字母排序)进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 
TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。 
TreeMap是非线程安全的。 它的iterator 方法返回的迭代器是fail-fast的。

HashMap TreeMap
遍历出来数据无序 自然排序或者创建映射提供的Comparator 进行排序
基于散列表 红黑树
取值速度快 取值速度慢
适用于在Map中插入、删除和定位元素 适用于按自然顺序或自定义顺序遍历键(key)

 

 

 

你可能感兴趣的:(Java,Interview)