在Java中,List
是 Collection
接口的一个子接口,它是一个有序的集合,可以包含重复的元素。List
支持元素的插入、删除、搜索以及访问操作。List
接口定义了一系列方法来操作列表中的元素。
List接口的主要方法:
add(E e)
:将指定的元素添加到此列表的末尾。add(int index, E element)
:在指定位置插入元素。remove(int index)
:移除指定位置的元素。get(int index)
:返回指定位置的元素。int size()
:返回列表中的元素数量。boolean contains(Object o)
:检查列表是否包含指定的元素。Iterator<E> iterator()
:返回列表的迭代器。
List接口的主要实现类:
- ArrayList
- LinkedList
- Vector
1. ArrayList
ArrayList
是基于动态数组实现的,它允许对元素进行快速随机访问。由于 ArrayList
是基于数组实现的,所以它的元素增加和删除操作相对较慢,因为这些操作可能涉及到数组的扩展或压缩。
代码示例:
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// 输出: [1, 2, 3]
System.out.println("ArrayList: " + list);
list.add(1, 5); // 在索引1的位置插入元素5
// 输出: [1, 5, 2, 3]
System.out.println("After adding 5 at index 1: " + list);
list.remove(2); // 移除索引2的元素
// 输出: [1, 5, 3]
System.out.println("After removing element at index 2: " + list);
int size = list.size();
// 输出: Size of ArrayList: 3
System.out.println("Size of ArrayList: " + size);
}
}
2. LinkedList
LinkedList
是基于双向链表实现的,它允许对元素进行快速的插入和删除操作。LinkedList
适合于需要频繁插入和删除元素的场景,但不适合于频繁的随机访问,因为链表的随机访问速度相对较慢。
代码示例:
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
// 输出: [1, 2, 3]
System.out.println("LinkedList: " + list);
list.add(1, 5); // 在索引1的位置插入元素5
// 输出: [1, 5, 2, 3]
System.out.println("After adding 5 at index 1: " + list);
list.remove(2); // 移除索引2的元素
// 输出: [1, 5, 3]
System.out.println("After removing element at index 2: " + list);
int size = list.size();
// 输出: Size of LinkedList: 3
System.out.println("Size of LinkedList: " + size);
}
}
3. Vector
Vector
是一个同步的 List
实现,它和 ArrayList
类似,但它的所有操作都是线程安全的。由于线程安全的特性,它的性能通常低于 ArrayList
。
代码示例:
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
Vector<Integer> vector = new Vector<>();
vector.add(1);
vector.add(2);
vector.add(3);
// 输出: [1, 2, 3]
System.out.println("Vector: " + vector);
vector.add(1, 5); // 在索引1的位置插入元素5
// 输出: [1, 5, 2, 3]
System.out.println("After adding 5 at index 1: " + vector);
vector.remove(2); // 移除索引2的元素
// 输出: [1, 5, 3]
System.out.println("After removing element at index 2: " + vector);
int size = vector.size();
// 输出: Size of Vector: 3
System.out.println("Size of Vector: " + size);
}
}
总结
ArrayList
提供快速的随机访问,适合于频繁读取的场景。LinkedList
提供快速的插入和删除操作,适合于频繁修改的场景。Vector
是线程安全的List
实现,适合于多线程环境中。
选择哪个实现类取决于具体的应用场景和性能需求。