大家都放假了吧,祝大家假期愉快~
在工作中我们经常会因为某些业务逻辑,需要向集合中频繁追加元素。
你有思考过用哪种集合?为什么?
重温下众所周知的概念(我看网上大部分都是写的概念,不容易让你理解记住,今天就不用大篇幅写了,改天详细写下):
ArrayList :基于动态数组的数据结构,插入删除效率低,随机访问相率高。
LinkedList : 基于链表的数据结构,插入删除效率高,随机访问效率低。
进入正题:
public void giveALike(){
List<Integer> arrayList = new ArrayList<>();
System.out.println("arrayList startTime " + System.currentTimeMillis());
for (int i = 0; i < 1000; i++) {
arrayList.add(i);
}
System.out.println("arrayList endTime " + System.currentTimeMillis());
System.out.println("------------------------------宁点的赞,是对我最大的鼓励-------------------------------");
LinkedList<Integer> linkedList = new LinkedList<>();
System.out.println("linkedList startTime " + System.currentTimeMillis());
for (int i = 0; i < 1000; i++) {
linkedList.add(i);
}
System.out.println("linkedList endTime " + System.currentTimeMillis());
}




可能循环次数太少不明显,那咱们增加循环次数。


1000W次(以下结果为执行10次,取大概值):
arrayList 毫秒差值3800+
linkedList 毫秒差值1400+
以上结果,仅为本机结果,不同配置的电脑执行效率会有一些差别。
在使用 arrayList 时,最好赋‘初始容量’减少、避免数组扩容,从而提升运行效率(对ArrayList插入数据越多,越能展现正确赋初始容量带来的性能)。
List<Integer> arrayList = new ArrayList<>(initialCapacity:初始容量);

结论:
插入次数不是很多时(至于多少算‘很多’,没有具体的定论,需要自己去实践),大部分情况 ArrayList 就能很好的满足咱们的需求了。只有插入次数够多才能体现 LinkedList 链表结构所带来的优势。
“从计算机程序出现的第一天起,对效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。” ——《深入了解java虚拟机》