一、核心概念
ArrayList基于动态数组,查询快增删慢;LinkedList基于双向链表,增删快查询慢,俩都是List接口实现类,日常开发高频用。
二、关键语法&代码示例
- 初始化与基础操作
java
// ArrayList初始化
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("进阶");
// 随机访问(优势)
System.out.println(arrayList.get(0)); // 直接通过索引获取,速度快
// LinkedList初始化
List<String> linkedList = new LinkedList<>();
linkedList.add("链表");
linkedList.add("数组");
// 首尾操作(优势)
((LinkedList<String>) linkedList).addFirst("头部");
((LinkedList<String>) linkedList).removeLast();
- 性能对比核心场景
java
// 1. 随机查询对比
long start1 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
arrayList.get(i); // 耗时短,O(1)
}
long end1 = System.currentTimeMillis();
long start2 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
linkedList.get(i); // 耗时长,O(n)
}
long end2 = System.currentTimeMillis();
System.out.println("ArrayList查询耗时:" + (end1 - start1) + "ms");
System.out.println("LinkedList查询耗时:" + (end2 - start2) + "ms");
三、核心总结
- 查多改少用ArrayList,随机访问是强项;
- 增删频繁用LinkedList,首尾操作效率高;
- 俩都线程不安全,并发场景需加锁或用CopyOnWriteArrayList。