原文网址:Java--JDK8与JDK7的HashMap区别--HashMap、TreeMap和linkedHashMap的区别_IT利刃出鞘的博客-CSDN博客
简介本文介绍Java的HashMap的一些对比:JDK8与JDK7中HashMap的区别,HashMap、TreeMap和linkedHashMap的区别。
JDK7与JDK8的HashMap区别| 项 | JDK7 | JDK8 |
| 数据结构 | 数组+链表。 复杂度:O(n) | 数组+链表+红黑树 链表节点数大于8时,链表转为红黑树,复杂度降至O(logn) |
| 插入位置 | 插入链表头部 | 插入链表尾部 |
| hash算法 | 复杂 | 简单。 红黑树效率高,提高查询效率的地方由红黑树实现,没必要像jdk7那么复杂。 |
| 扩容机制 | 多线程可能导致:数据覆盖、读出为null、死循环 | 多线程可能导致:数据覆盖、读出为null。不会导致死循环(因为用了尾插) |
相同点
| 项 | 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时,结果是排过序的。 | 不支持。 |
| 按插入顺序存放 | 不支持 | 不支持。 | 支持。 遍历时,按插入的顺序出结果。 |
jdk7与jdk8的HashMap区别_cosuyo的博客-CSDN博客_jdk7和jdk8的hashmap的区别
HashMap在JDK7和JDK8中的区别 - 知乎
JDK 7和JDK8中的HashMap的实现原理不同之处,以及JDK8中HashMap的优势之处_菜鸟程序猿的博客-CSDN博客
HashMap原理jdk7和jdk8的区别_翻身咸鱼的博客-CSDN博客_jdk7和8的hashmap区别



