ArrayList集合中怎么插⼊元素的
写⼀个测试⽅法,创建⼀个集合,看看到底是怎么执⾏插⼊操作的。
public static void test1(){
//创建⼀个集合
List<Integer> list = new ArrayList<Integer>();我不再什么作文
音乐素养list.add(1);
list.add(7);
list.add(5);
入党函调证明list.add(8);
System.out.println(list);
}
懒人记单词
控制台输出:[1, 7, 5, 8]
ArrayList 提供了⼀个add()⽅法,当我们创建了⼀个集合对象,直接调⽤add()⽅法就可以插⼊指定类型的元素,但是add()⽅法到底是怎么向集合中插⼊元素的呢?下⾯我们来分析⼀下。
微卷中长发
当执⾏插⼊操作的时候,⾸先 ensureCapacityInternal(size + 1) ,elementData[size] = e; size++;,这⾥的size是ArrayList中定义的表⽰集合⼤⼩的成员变量。
出阁宴主持词
下边我们看add 调⽤的ensureCapacityInternal⽅法
elementData,EMPTY_ELEMENTDATA,DEFAULT_CAPACITY都是什么意思
也就是说当我们创建⼀个ArrayList集合的时候,默认会给我们分配⼀个容量为10的数组,⾄于怎么扩容,我们再看 grow⽅法
注意:这⾥传过来的minCapcatiy的值是size+1,能够实现grow⽅法调⽤就肯定是(size+1)>elementData.length的情况,所以size就是初始最⼤容量或上⼀次扩容后达到的最⼤容量,所以才会进⾏扩容。
newCapacity=oldCapacity+(oldCapacity>>1),这⾥就是扩容⼤⼩确定的地⽅,相当于新的最⼤容量是 size+1+size/2 相当于原来的1.5倍然后加1。
我们看到调⽤了Arrays⼯具类的 copyOf⽅法。
最后我们看⼀下System.arraycopy()⽅法 ,会发现和remove()删除集合中的元素⽤的同⼀个⽅法,传送门
ArrayList 底层是数组的形式,所以⽀持重复元素,如果没有指定⼤⼩,默认容量为10,当超过的默认容量的时候,会进⾏扩容,按照原来容量的1.5倍加1进⾏。当存⼊的集合数量⼀致增加时,会⼀直进⾏扩容操作,所以如果预先知道需要的集合的⼤⼩,可以直接创建⼀个指定⼤⼩的ArrayList集合,可以避免重复数组copy的扩容操作。
啜泣的近义词>长毛怪