java集合包数据结构图解

Collection

List

ArrayList

  • 数据结构图
    -在这里插入图片描述
  • 点评
    ArrayList是一个其容量能够动态增长的动态数组,最大长度限制 Integer.MAX_VALUE - 8 ,但是真实限制长度也会受到JVM的限制,可能小于这个值,默认初始长度为10(为什么是10而不是8?!)。 它继承了AbstractList,实现了ListRandomAccess, Cloneable, java.io.Serializable
    ArrayList 添加元素如果数组满了就需要调整数组长度,最后会使用Arrays.copyOf方法做一次数据拷贝,最好能保证初始化一个具体的长度避免这种情况。同理,删除元素也会涉及到数组整体数据的移动,所以可以理解 ArrayList 不擅长做添加删除操作,但是它的获取元素操作性能最优。

LinkedList

  • 数据结构图
    在这里插入图片描述
  • 点评
    LinkedList核心数据是带有前后指针的内部实现类组成的链表,链表没有长度限制, 它继承了AbstractSequentialList,实现了ListDeque, Cloneable, java.io.Serializable
    由数据结构可以知道LinkedList的操作性能很好,因为实现了双向队列接口DequeLinkedList可以从头或尾操作数据。
    但是读取性能不好。

Vector => Stack

  • 数据结构图
    参考ArrayList
  • 点评
    Stack继承Vector,后者的实现与ArrayList一毛一样,不同的是Vector的数据增减操作都是线程安全的,对方式使用了synchronized

Queue

PriorityQueue

  • 数据结构图
    在这里插入图片描述

  • PriorityQueue核心数据也是一个其容量能够动态增长的动态数组,它的增长规则与ArrayList一样。 它继承了AbstractQueue,实现了java.io.Serializable
    添加元素时除了会像ArrayList一样做扩容处理外,它还会根据构造时设置的Comparator规则对元素做排序,所以出队列的元素都是按顺序的。

Set

TreeSet

  • 数据结构图
    参考TreeMap
  • 点评
    TreeSetTreeMap的区别在于树节点存的内容,Set是单个值,Map是KV对。TreeSet不会出现重复值,TreeMap会有重复。

HashSet

  • 数据结构图
    参考HashMap
  • 点评
    HashSetHashMap的区别在于树节点存的内容,Set是单个值,Map是KV对。HashSet不会出现重复值,HashMap会有重复。

Map

Dictionary

Hashtable

  • 数据结构图
    在这里插入图片描述
  • 点评
    Hashtable核心数据结构在于一个数组,元素为自己内部实现类EntryEntry有个指向下一个Entry的指针,因此Entry可以组成一个链表。与HashMap一样,在添加数据时,数据大小达到阈值后出发rehash,重新调整数组大小和Entry连接。Hashtable的数据操作在方法上使用synchronized保证线程安全。它继承了Dictionary,实现了Map<K,V>, Cloneable, java.io.Serializable

AbstractMap

HashMap

  • 数据结构图
    在这里插入图片描述
  • 点评
  • HashMap核心数据结构为一个动态增长的数组,数组元素为HashMap的内部实现类Node,维持一个向后的指针。通过对添加K-V的key值做hash计算,将数据填入数组,遇到hash冲突的数据就通过Node的next连接上去。java1.8以后当Node链长度超过8时,会将Node转成TreeNodeTreeNode结构上是一个树,提高了查询效率。
    另外,添加新数据后,数据size超过某一阈值后,HashMap会将数组长度X2,所有Node也会根据新的hash值重新散列。

TreeMap

  • 数据结构图
    在这里插入图片描述
  • 点评
    TreeMap核心数据结构是一个红黑树,添加节点数据就是依据构造时设置的Comparator排序设置树节点,因此它是有序的。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值