作为小白,面试了几家公司,遇到了一个印象很深的题目,ArrayList底层做了哪些优化,what?当时只是了解一点HashMap的底层,根本就不知道啊。这几天抽时间看了一下,ArrayList的底层有一个list.ensureCapacity(int size)f方法(或者也可以直接通过构造方法进行初始化),注意List这个父接口没有,这个方法会初始化list数组的大小(默认为10),从而不用list自己去进行扩容,这样就省了很多时间。
ArrayList<Integer> list = new ArrayList<>();
long time1 = System.currentTimeMillis()
for (int i = 1; i < 10000000; i++) {
list.add(i);
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
List<Integer> list = new ArrayList<>(10000000);
long time1 = System.currentTimeMillis();
for (int i = 1; i < 10000000; i++) {
list.add(i);
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
两者差了400毫秒左右。