jdk1.8 HashMap底层数据结构:散列表+链表+红黑树(图解+源码)
一、前言 本文由jdk1.8源码整理而得,附自制jdk1.8底层数据结构图,并截取部分源码加以说明结构关系。 二、 jdk1.8 HashMap底层数据结构图 三、源码 1.散列表(Hash table,也叫哈希表): /** * 表,第一次使用时初始化(而非实例化集合时进行初始化),并根据需要调整大小。 当分配时,长度总是2的幂。 (在某些操作中,我们还允许长度为零,以允许当前不需要的引导机制。) */ transient Node<K,V>[] table; 2.链表: /** * Basic hash bin node, used for most entries. (See below for * TreeNode subclass, and in LinkedHashMap for its Entry subclass.) */ static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node <K,V> next; …… } 3.红黑 树: /** * Entry for Tree bins. Extends LinkedHashMap.Entry (which in turn * extends Node