ArrayList清空数组有个自带的clear()方法。先贴上源码:
public void clear() {
modCount++;
final Object[] es = elementData;
for (int to = size, i = size = 0; i < to; i++)
es[i] = null;
}
clear()方法是循环list数组,将每个下标设置为null。后面我测试了一下,和重新赋值方法对比了一下,这里我创建了一个长度 10000000 的数组,第一种方式用自带的clear()方式,耗时 7ms。第二种是直接重新赋值,耗时0ms。结果是一样的,两个list.size() 都是0.
int i = 10000000;
ArrayList<Integer> list= new ArrayList<>(i);
for (int j = 0; j < i; j++) {
list.add(i);
}
long start = System.currentTimeMillis();
list.clear();
long end = System.currentTimeMillis();
System.out.println(list.size());
System.out.println("list:"+list);
System.out.println("用时:"+(end-start));
list= new ArrayList<>(i);
for (int j = 0; j < i; j++) {
list.add(i);
}
start = System.currentTimeMillis();
list=new ArrayList<>();
end = System.currentTimeMillis();
System.out.println(list.size());
System.out.println("list:"+list);
System.out.println("用时:"+(end-start));
结果:
---------------------------------------------------分割线-----------------------------------------------
后面以为clear()方法会保留数组长度,结果并不是。
所以想问问大佬们,用clear()有啥优点吗?