}/*** 这里属于针对初始化时的扩容判断 当为DEFAULTCAPACITY_EMPTY_ELEMENTDATA 时说明是无参构造函数创建的,则可以直接扩容为DEFAULT_CAPACITY也就是10为初始容量*/privatestaticintcalculateCapacity(Object[] elementData,intminCapacity) {if(elementData ==DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {returnMath.max(DEFAULT_C...
④ DEFAULT_CAPACITY 这个变量的注释,有点小怪,默认初始容量 ,但是记住,我们以1.8源码为准,眼见为实 。因为可以看到 : 第一句话: ArrayList的容量是该数组缓冲区的长度(上文已经说到了)。 第二句话,如果一个空的ArrayList 被第一次add的时候, DEFAULT_CAPACITY=10这个值会被用上。 所以到了这里, 再看一下...
初始化对象时,如果没有传大小,则列表的大小为 DEFAULT_CAPACITY 的默认值 10。当列表容量不够时,继续往列表中追加元素,则通过数组拷贝,对原数组进行扩容,扩容的方式为 "int newCapacity = oldCapacity + (oldCapacity >> 1)",即新数组容量 newCapacity 为 10 + 10/2 = 15。如果一次性追加多个元素时比如 6...
第二句话,如果一个空的ArrayList 被第一次add的时候, DEFAULT_CAPACITY=10这个值会被用上。所以到...
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 还有一个特殊的成员变量modCount,这是快速失败机制所需要的,也就是记录修改操作的次数,主要是迭代遍历的时候,防止元素被修改。如果操作前后的修改次数对不上,那么有些操作就是非法的。transient表示这个属性不需要自动序列化。
DEFAULT_CAPACITY: 数组初始容量为10 size:当前元素个数 MAX_ARRAY_SIZE:数组最大容量 现在我们知道了 ArrayList 其实就是基于数组的实现。因此,增删改查操作就变得很容易理解了。 get(index)直接获取数组的底 index 个元素 set(index,object)直接修改数组的第 index 个元素的引用 ...
进入方法之后,我们看到了一个if语句,发现了么,这个就是我们之前在无参构造函数时卖的关子,当当前的大小为默认数组大小的常量时,minCapacity(即位数组中存储的数据大小即size+1)就为DEFAULT_CAPACITY, minCapacity之间大的那个,而minCapacity的默认值为0,所以从这里就可以知道,无参构造函数产生的数组大小为10~~ ...
* Default initial capacity. */ privatestaticfinalint DEFAULT_CAPACITY =10; 31. 为何Collection不从Cloneable和Serializable接口继承? Collection表示一个集合,包含了一组对象元素。如何维护它的元素对象是由具体实现来决定的。因为集合的具体形式多种多样,例如list允许重复,set则不允许。而克隆(clone)和序列化(serial...
sc : DEFAULT_CAPACITY; // 初始化数组! Node<K,V>[] nt = (Node<K,V>[])new Node<?,?>[n]; // 将初始化的数组nt,赋值给tab和table table = tab = nt; // sc赋值为了数组长度 - 数组长度 右移 2位 16 - 4 = 12 // 将sc赋值为下次扩容的阈值 sc = n - (n >>> 2); } } ...
多单词时每个单词用下划线连接:XXX_YYY_ZZZ 例如:MAX_VALUE,PI,DEFAULT_CAPACITY 注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。初识变量 变量的概念:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化变量的构成包含三个要素:数据类型、变量名、存储的值Java中变量声明的...