集合框架底层都是采用哪些结构存储数据的呢?
下文笔者讲述Java中常见的集合存储类的底层数据存储结构
我们都知道java中数据的存储其底层都是 数组或链表(树是一种特殊的链表结构)集合框架按照框架的不同,可分为以下三类,如:
Collection(list,Set),Map
各存储容器的底层存储单位结构说明
List
实现子类 | 底层存储结构 |
ArrayList | Object数组 |
LinkedList | 双向循环链表 |
Vector | Object数组 |
Set
实现子类 | 底层存储结构 |
HashSet(无序,唯一) | 基于HashMap实现 底层采用 HashMap 的key来保存元素 |
LinkedHashSet | LinkedHashSet 继承于HashSet 并且其内部是通过 LinkedHashMap 来实现的 |
TreeSet(有序,唯一) | 红黑树(自平衡的排序二叉树) |
Map
实现子类 | 底层存储结构 |
HashMap | JDK1.8之前HashMap由数组+链表组成的 数组是HashMap的主体 链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突) JDK1.8以后在解决哈希冲突时有了较大的变化 当链表长度大于阈值(默认为8) 但是数组长度小于64时会首先进行扩容 否则会将链表转化为红黑树 以减少搜索时间 |
LinkedHashMap | LinkedHashMap 继承自 HashMap
它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成 另外,LinkedHashMap 在上面结构的基础上, 增加了一条双向链表,使得LinkedHashMap可以保持键值对的插入顺序 |
HashTable | 数组+链表组成的,数组是 HashTable 的主体, 链表则是主要为了解决哈希冲突而存在的 |
TreeMap | 红黑树(自平衡的排序二叉树) |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。