JAVA集合
深入源码研究JAVA各集合底层的实现方式
乖怪查理
BOW !!!
展开
-
JAVA集合之Hashtable
存放的元素是键值对Hashtable的键和值都不能为null,否则会抛出空指针异常 public synchronized V put(K var1, V var2) { if (var2 == null) { throw new NullPointerException(); } Hashtable使用方法基本和HashMap一样Hashtable线程安全(synchronized),HashMap线程不安全底层有数组 Ha.原创 2022-05-18 16:51:22 · 297 阅读 · 2 评论 -
JAVA集合之HashMap
HashMap底层是数组+链表+红黑树,HashSet底层即是HashMap,在前面《JAVA集合之HashSet》已记录过,故此只做一些分析。调用HashMap()的无参构造方法时,会初始化加载因子,并且此时table数组是null。 public HashMap() { this.loadFactor = 0.75F; }当第一次向HashMap中添加元素时,会扩容到16,元素会存放在HashMap$Node对象中。我们知道HashMap是K-V的形式,其实最.原创 2022-05-18 16:05:11 · 218 阅读 · 0 评论 -
JAVA集合之LinkedHashSet
LinkedHashSet是HashSet的子类public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable {LinkedHashSet底层是一个LinkedHashMap,底层维护了一个 数组+双向链表 HashSet(int var1, float var2, boolean var3) { this.ma.原创 2022-05-16 16:52:04 · 531 阅读 · 0 评论 -
JAVA集合之HashSet
HashSet集合底层是HashMap public HashSet() { this.map = new HashMap(); }HashSet添加步骤:添加元素时,先得到这个元素的hash值,并转化索引值(并不等于实际放的位置的索引,真正的索引值还会进行下图二运算(var9)),这里我注意到了一点,当添加进集合的值是null时,该算法计算出来的索引值为0,所以null放进去的位置始终在集合第一位。 static final int hash(Objec.原创 2022-05-16 16:53:18 · 422 阅读 · 0 评论 -
JAVA集合之LinkedList
LinkedList底层是一个双向链表,他维护了两个属性fist和last分别指向首节点和尾节点,每个节点(Node对象)中又维护的prev、next、item三个属性,通过prev指向前一个节点,next指向后一个节点,item就是具体的值当使用无参构造器去构造LinkedList集合时,其实只是做了一个初始化,并没有其他作用。而当使用有参构造器去构造LinkedList,它只有一个参数,参数类型是集合类。有参构造方法调用了无参构造方法,并调用了addAll方法。addAll方法的主要作用是:将指定集.原创 2022-05-13 11:28:49 · 280 阅读 · 0 评论 -
JAVA集合之ArrayList
1.ArrayList底层是一个名叫 elementData 的数组;2.当我们使用无参构造函数去构造一个ArrarList集合时,他的初始容量为0,源码为:new Object[0]当第一次使用add方法想集合里面添加元素时,源码会首先判断集合是否需要扩容(正是因为每次添加数据时都需要判断,所以这也是ArrayList集合效率低下的原因之一)如果原有elementData数组容量为0,则扩容elementData容量为10。随后若需要再次扩容,则每次扩容为原来的1.5倍;3.当我们使用指原创 2022-05-12 16:57:53 · 211 阅读 · 0 评论 -
JAVA集合之Vector
Vector底层同ArrarList一样,也是一个名叫 elementData 的数组this.elementData = new Object[var1];当使用无参构造器去构造Vector时,他会调用有参构造器,并赋初始容量为10大小。 public Vector() { this(10); }后续扩容时,每次扩大的容量为原有容量的两倍 int var2 = this.elementData.length; int v.原创 2022-05-13 10:31:05 · 102 阅读 · 0 评论