天天看点

Java--JDK8与JDK7的HashMap区别--HashMap、TreeMap和LinkedHashMap的区别

简介

        本文介绍Java的HashMap的一些对比:JDK8与JDK7中HashMap的区别,HashMap、TreeMap和LinkedHashMap的区别。

JDK7与JDK8的HashMap区别

<col>

JDK7

JDK8

数据结构

数组+链表。

复杂度:O(n)

数组+链表+红黑树

链表节点数大于8时,链表转为红黑树,复杂度降至O(logn)

插入位置

插入链表头部

插入链表尾部

hash算法

复杂

简单。

红黑树效率高,提高查询效率的地方由红黑树实现,没必要像jdk7那么复杂。

扩容机制

多线程可能导致:数据覆盖、读出为null、死循环

多线程可能导致:数据覆盖、读出为null。不会导致死循环(因为用了尾插)

Map区别

相同点

HashMap/TreeMap/LinkedHashMap

类型

都属于Map;Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。

线程安全性

都是线程不安全的

不同点

HashMap

TreeMap

LinkedHashMap

null

只允许一条记录的key值为Null(多条会覆盖);

允许多条记录的Value为 Null。

不允许key的值为null

key和value均允许为null

(put和get操作,基本上可以达到常数时间的性能)

红黑树。

(get或put操作的时间复杂度是O(log(n)))

HashMap+双向链表

此类是HashMap的子类。

按key排序

不支持。

按照hashCode进行输出。

支持排序。

默认按key升序排序。可用Comparator自定义排序。

用Iterator 遍历TreeMap时,结果是排过序的。

按插入顺序存放

不支持

支持。

遍历时,按插入的顺序出结果。