3.如果1.5倍太大或者我们需要的容量太大,那就直接拿newCapacity = (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE来扩容。 4.扩容之后是通过数组的拷贝来确保元素的准确性的,所以尽可能减少扩容操作。 ArrayList 的最大存储能力:Integer.MAX_VALUE。 size 为集合中存储的元素的个数。...
**ArrayList大小:**用来保存ArrayList有多少个元素。 private int size; 1. **最大的容量:**指定ArrayList能保存的最大容量,值为Integer.MAX_VALUE - 8; private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 1. **被修改的次数:**记录ArrayList被修改的次数,默认值为0,是继承AbstractList...
②size是 这个arrayList 的 底层数组 Object[] elementData 包含的元素 ,记住了是包含,而不是 这个数...
②size是 这个arrayList 的 底层数组 Object[] elementData 包含的元素 ,记住了是包含,而不是 这个数组的 length (length是注意点了,数组的length其实说白了就是所谓的容量); ③其余就是2个空的数组,具体在哪里被调用被使用,源码里面随便点一下就可以看到; ④ DEFAULT_CAPACITY 这个变量的注释,有点小怪,默认初...
Java集合——ArrayList 一、基础 ArrayList不是线程安全的,多线程建议使用Vector或者CopyOnWriteArrayList; 底层实现是Object数组。默认容量DEFAULT_CAPACITY为10,最大数组大小MAX_ARRAY_SIZE为Integer.MAX_VALUE-8; 实现了RandomAccess接口,表明可以快速随机访问;
ArrayList会expand到 DEFAULT_CAPACITY(即10), HashMap会resize到 DEFAULT_INITIAL_CAPACITY(1 << 4...
④ DEFAULT_CAPACITY 这个变量的注释,有点小怪,默认初始容量 ,但是记住,我们以1.8源码为准,眼见为实 。因为可以看到 : 第一句话: ArrayList的容量是该数组缓冲区的长度(上文已经说到了)。 第二句话,如果一个空的ArrayList 被第一次add的时候, DEFAULT_CAPACITY=10这个值会被用上。
相当于arraylist给了两层防护。 return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } 2)void add(int,E);在特定位置添加元素,也就是插入元素 public void add(int index, E element) { rangeCheckForAdd(index);//检查index也就是插入的位置是否合理。//...
copyOf(elementData, size); } } 线程安全 ArrayList是线程不安全的。在其迭代器iteator中,如果有多线程操作导致modcount改变,会执行fastfail。抛出异常。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 final void checkForComodification() { if (modCount != expectedModCount) throw new Concurrent...
private static final int DEFAULT_CAPACITY = 10; 性能分析 ArrayList作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需要移动后续所有元素。 插入元素: ArrayList在执行插入元素是超过当前数组预定义的最大值时,数...