在Java中,List
是一个继承自 Collection
接口的子接口,表示一个有序的集合,允许重复元素。List
接口定义了一组方法来处理列表中的元素,并且有多个具体实现类,如 ArrayList
、LinkedList
和 Vector
。
1.主要方法
add(E e)
:将指定的元素e
添加到列表的末尾。add(int index, E element)
:在指定位置index
插入元素element
。get(int index)
:返回指定位置index
的元素。set(int index, E element)
:用指定的元素element
替换指定位置index
的元素。remove(int index)
:移除指定位置index
的元素。indexOf(Object o)
:返回指定元素o
在列表中第一次出现的索引;如果未找到,则返回-1
。lastIndexOf(Object o)
:返回指定元素o
在列表中最后一次出现的索引;如果未找到,则返回-1
。subList(int fromIndex, int toIndex)
:返回列表的一个子列表,从fromIndex
(包含)到toIndex
(不包含)。
2.常见实现类
-
ArrayList
:底层使用动态数组,提供快速的随机访问,但插入和删除操作可能较慢。- 性能特点:对索引的访问非常快,适合频繁读取数据的场景。
- 线程安全:
ArrayList
不是线程安全的,若需线程安全的ArrayList
,可以使用Collections.synchronizedList
方法或CopyOnWriteArrayList
。
-
LinkedList
:底层使用双向链表,提供快速的插入和删除操作,但随机访问较慢。- 性能特点:插入和删除操作较快,适合频繁修改数据的场景。
- 额外功能:实现了
Deque
接口,提供了双端队列功能(addFirst
、addLast
、removeFirst
、removeLast
等方法)。
-
Vector
:底层使用动态数组,类似于ArrayList
,但它是同步的,即线程安全的。- 性能特点:由于同步机制,
Vector
的性能通常低于ArrayList
。 - 现代使用:
Vector
现在不常用于新的代码,通常推荐使用ArrayList
。
- 性能特点:由于同步机制,
3.遍历list
使用迭代器
Iterator<E> iterator = list.iterator();
while (iterator.hasNext()) {
E element = iterator.next();
// 处理元素
}
增强for
for (E element : list) {
// 处理元素
}
传统的for
for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 处理元素
}
4.实用工具
Collections
类:提供了一些静态方法来操作 List
,如排序、查找、填充等。
Collections.sort(list);
Collections.reverse(list);
Collections.fill(list, value);
//Arrays.asList():将数组转换为 List。
List<String> list = Arrays.asList("one", "two", "three");