JAVA面试|常用的List集合(java常见集合面试题)

JAVA面试|常用的List集合(java常见集合面试题)

编码文章call10242025-07-11 21:52:284A+A-

在Java中,List是常用的集合接口,它的核心实现类有 ArrayList、LinkedList和Vector。以下是通俗易懂的解释和应用场景分析:


一、ArrayList

特点:

底层基于数组:内存连续,类似一排座位。

查询快:可以通过下标直接定位元素(时间复杂度 O(1))。

增删慢:插入或删除元素时,可能需要移动后续元素(比如在中间插入数据,后面的元素都要往后挪)。

应用场景:

频繁读取,很少增删:比如从数据库查出的数据列表,只需要遍历展示。

需要随机访问:比如通过索引快速获取第5个元素。

元素数量相对固定:不需要频繁扩容(ArrayList 默认容量是 10,扩容时会创建新数组并复制数据)。

示例代码:

List<String> list = new ArrayList<>();

list.add("苹果");

list.add("香蕉");

String fruit = list.get(0); // 快速获取


二、LinkedList

特点:

底层基于双向链表:元素通过“节点”连接,类似手拉手的人。

增删快:插入或删除只需修改相邻节点的引用(时间复杂度 O(1))。

查询慢:要查找某个元素需要从头或尾遍历(时间复杂度 O(n))。

应用场景:

频繁插入或删除:比如实现一个撤销操作队列,每次在头部添加新操作。

实现栈或队列:LinkedList 实现了Deque接口,可以直接当队列或栈使用。

元素数量变化大:不需要扩容,按需动态分配内存。

示例代码:

List<Integer> list = new LinkedList<>();

list.add(1);

list.addFirst(0); // 在头部插入

list.removeLast(); // 删除尾部元素


三、Vector

特点:

线程安全:所有方法都加了synchronized锁,保证多线程安全。

性能较差:加锁导致效率低,单线程环境下不如ArrayList。

扩容机制:默认扩容为原来的2倍(ArrayList是1.5 倍)。

应用场景:

多线程环境:需要线程安全的List(但更推荐用 CopyOnWriteArrayList)。

遗留系统兼容:旧代码中可能还在使用Vector。

示例代码:

List<String> list = new Vector<>();

list.add("A");

list.add("B");


四、如何选择?

大多数情况下用ArrayList(90%场景)。

需要频繁增删或实现队列/栈时用LinkedList

多线程环境优先考虑CopyOnWriteArrayList
Collections.synchronizedList()
,而不是Vector。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4