Java中List接口天然支持有序、可重复存储,需依场景选ArrayList(随机访问快)、LinkedList(首尾增删快)或Collections.synchronizedList替代Vector;元素按add顺序存放且允许重复,排序需手动调用Collections.sort或list.sort,重复元素可通过indexOf、lastIndexOf等方法精准定位与操作。

Java中List接口天然支持有序、可重复的数据存储,关键在于选择合适的实现类并合理使用其特性。
选择适合的List实现类
ArrayList、LinkedList和Vector都实现了List接口,但适用场景不同:
- ArrayList:基于动态数组,随机访问快(O(1)),增删末尾高效;适合读多写少、需频繁按索引取值的场景
- LinkedList:基于双向链表,头尾增删快(O(1)),查找慢(O(n));适合频繁在首尾插入/删除的队列或栈操作
- Vector:线程安全但性能较低,一般推荐用Collections.synchronizedList(ArrayList)替代
保持插入顺序与允许重复
List不进行自动去重或排序,元素严格按add()调用顺序存放,相同对象可多次添加:
List<String> list = new ArrayList<>();
list.add("apple"); // 索引0
list.add("banana"); // 索引1
list.add("apple"); // 索引2 —— 允许重复,位置明确
System.out.println(list); // [apple, banana, apple]
手动维护有序性(如需排序)
List本身不自动排序,需显式调用排序方法。注意:要求元素实现Comparable接口,或传入Comparator:
立即学习“Java免费学习笔记(深入)”;
- 使用Collections.sort(list) —— 修改原列表
- 使用list.sort(Comparator) —— Java 8+,更直观
- 若需升序/降序切换,可用Comparator.naturalOrder()或Comparator.reverseOrder()
List<Integer> nums = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5)); Collections.sort(nums); // [1, 1, 3, 4, 5] nums.sort(Comparator.reverseOrder()); // [5, 4, 3, 1, 1]
安全地处理重复元素与定位
利用List提供的索引方法精准操作重复项:
- indexOf(Object) 返回首次出现位置
- lastIndexOf(Object) 返回最后一次出现位置
- get(int index) 按序获取指定位置元素
- set(int index, E element) 替换指定位置元素,不破坏顺序
例如统计某元素出现次数:
String target = "apple"; long count = list.stream().filter(s -> s.equals(target)).count();


















