List 是 Java 中常用的数据结构之一,用于存储一组有序的元素。List 是一个接口,有多个实现类,如 ArrayList、LinkedList 等。
List 的特点:
- 可以存储重复元素,且元素有序;
- 可以通过索引访问元素;
- 元素可以插入、删除和替换;
- 可以使用迭代器遍历元素。
常用方法:
- add(E e):向列表末尾添加元素;
- add(int index, E element):将元素插入到指定位置;
- remove(int index):删除指定位置的元素;
- set(int index, E element):将指定位置的元素替换为给定的元素;
- get(int index):返回指定位置的元素;
- size():返回列表中元素的数量;
- indexOf(Object o):返回指定元素在列表中第一次出现的位置;
- subList(int fromIndex, int toIndex):返回列表中指定范围内的部分元素。
示例代码:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
System.out.println(list); // [apple, banana, orange]
list.add(1, "grape");
System.out.println(list); // [apple, grape, banana, orange]
list.remove(2);
System.out.println(list); // [apple, grape, orange]
System.out.println(list.get(1)); // grape
System.out.println(list.indexOf("orange")); // 2
List<String> subList = list.subList(0, 2);
System.out.println(subList); // [apple, grape]
注意事项:
- List 是一个接口,不能直接实例化,需要使用实现类;
- 在遍历 List 时,如果需要删除某个元素,应该使用迭代器的 remove() 方法,否则可能会抛出 ConcurrentModificationException 异常;
- 在使用 subList() 方法时,返回的子列表是原列表的一个视图,对其进行修改会影响原列表。
Java 中的 List 接口有多个实现类,常用的有:
- ArrayList:基于数组实现,支持快速随机访问,但插入和删除元素时需要移动其他元素,效率较低。
- LinkedList:基于链表实现,支持快速插入和删除元素,但访问元素时需要遍历链表,效率较低。
- Vector:与 ArrayList 类似,但是线程安全,性能较差,不推荐使用。
- Stack:基于 Vector 实现,提供了栈的功能,不推荐使用。
示例代码:
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
List<String> vector = new Vector<>();
List<String> stack = new Stack<>();
除了这些常用的实现类,还有一些其他的实现类,如 CopyOnWriteArrayList 等,根据具体的使用场景选择合适的实现类。