一、ArrayList简介
ArrayList是Java中最常用的集合类之一,它可以动态地增加或删除元素。底层实现是基于Object[]数组,数组初始长度为10,在元素个数占数组长度的70%时会自动进行扩容,扩容量为原长度的1.5倍。
当然,如果我们知道元素个数的上限,可以通过构造函数来初始化ArrayList的长度,以减少扩容的次数,从而提高效率。
二、ArrayList的add方法
在ArrayList中,添加元素最常用的方法是add,其方法签名为:
public boolean add(E e)
其中,E代表泛型,可以是任意的类类型。
add方法的作用是将指定的元素添加到ArrayList的末尾。
在这里,我们需要注意add方法的返回值为布尔类型,返回值为true表示添加成功,返回值为false表示添加失败。
三、ArrayList的add方法操作示例
下面我们展示add方法的具体使用方法,代码如下:
class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list); // [A, B, C]
}
}
在上面的代码中,我们先创建了一个String类型的ArrayList,然后通过add方法向其中添加了三个元素,最后输出结果为[A, B, C]。
四、ArrayList的add方法原理解析
在add方法的内部实现中,有两个变量值需要我们了解一下,具体如下:
- elementData:Object类型数组,存储元素的数组。
- size:int类型变量,表示ArrayList中元素的个数。
add方法会首先判断elementData数组是否足够存储,如果不足,则会进行扩容(默认扩容至原长度的1.5倍),然后将新元素添加到数组末尾,并增加size的值。
其代码实现如下:
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULT_CAPACITY_EMPTY_ELEMENT_DATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
五、ArrayList的add方法性能优化
当我们需要向ArrayList中添加大量元素时,频繁的扩容会造成性能的下降。为了解决这个问题,我们可以通过设置ArrayList的初始长度或者扩容量来优化性能。
下面,我们将展示通过设置初始长度来进行性能优化的示例。代码如下:
class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>(100000);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list.add("A" + i);
}
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("Duration: " + duration + "ms");
}
}
在上面的代码中,我们首先设置了ArrayList的初始长度为100000,然后通过循环向其中添加了100000个元素,并打印了添加元素所耗费的时间。
通过运行上面的代码,我们可以发现,由于设置了初始长度,添加元素所需的时间显著降低了。
六、总结
在本篇文章中,我们详细地介绍了Java中ArrayList的add方法,包括其作用、返回值、示例以及内部实现和性能优化等内容。
对于Java工程师而言,熟练掌握ArrayList的add方法及其性能优化技巧是非常重要的,可以在实际开发中提高代码的效率。
原创文章,作者:XNZR,如若转载,请注明出处:https://www.506064.com/n/134759.html
微信扫一扫
支付宝扫一扫