HashMap、HashTable、LinkedHashMap、TreeMap初理解

HashMap、HashTable、LinkedHashMap、TreeMap初理解_第1张图片
HashMap:
Map是基于散列实现,HashMap取代了HashTable,是以键值对的形式存储和操作数据的容器类型。插入和查询“键值对”的开销是固定的,可以通过构造器设置容量和加载因子,以调整容器性能,推介加载因子为0.75,0.75是一个折中选择后的推介值,能解决大多数场景问题。
HashTable:
HashTable是线程安全的,用了synchronized限制了每个方法,并且Key和Value都不能是Null.其它和HashMap没什么差别。
LinkHashMap:
LinkHashMap 类似HashMap,但是迭代遍历他的时候,取得“键值对”的顺序是其插入的顺序,可以理解为“桶结构” ,速度比hashMap慢一点,而迭代的访问速度反而更快,用链表来维护内部数据。LinkedHashMap是HashMap的子类,意味着它继承了HashMap的特性,除此之外,LinkedHashMap还保存了插入顺序。
TreeMap:
TreeMap则是基于红黑树的一种提供顺序访问的Map,和HashMap不同,它的get、put、remove之类操作都是O(log(n))的时间复杂度,具体顺序可以由指定 的Comparator来决定(String对象已经实现Comparator),或者根据键的自然顺序来判断。TreeMap得到的结果都经过排序的,TreeMap是Map中唯一一个带有subMap()方法的Map,它可以返回一个子树。

(1) 元素特性 HashTable中的key、value都不能为null;HashMap中的key、value可以为null,很显然只能有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap中当未实现 Comparator 接口时,key 不可以为null;当实现 Comparator 接口时,若未对null情况进行判断,则key不可以为null,反之亦然。
(2)顺序特性 HashTable、HashMap具有无序特性。TreeMap是利用红黑树来实现的(树中的每个节点的值,都会大于或等于它的左子树种的所有节点的值,并且小于或等于它的右子树中的所有节点的 值),实现了SortMap接口,能够对保存的记录根据键进行排序。所以一般需要排序的情况下是选择TreeMap来进行,默认为升序排序方式(深度优先搜索),可自定义实现Comparator接口 实现排序方式。 (3)初始化与增长方式 初始化时:HashTable在不指定容量的情况下的默认容量为11,且不要求底层数组的容量一定要为2的整数次幂;HashMap默认容量为16,且要求容量一定为2的整数次幂。 扩容时:Hashtable将容量变为原来的2倍加1;HashMap扩容将容量变为原来的2倍。

参考文献:Thinking in Java
https: //time.geekbang.org/column/intro/82 + 评论区

你可能感兴趣的:(java,java基础)