List
接口是 Java 集合框架中的一部分,用于表示有序的集合,允许存储重复的元素。它是 Collection
接口的子接口,提供了一系列操作有序元素的方法。以下是关于 List
接口的基本介绍和细节讨论:
基本介绍:
List
接口继承自Collection
接口,定义了一组方法来操作有序元素的集合。- 与集合不同,
List
允许存储重复的元素,而且它们是按照插入顺序维护的。
主要特点和方法:
- 有序性:
List
中的元素是有序的,插入的顺序决定了元素的排列顺序。 - 索引访问:
List
元素可以通过索引来访问,索引从0开始,表示第一个元素。 - 允许重复:
List
允许存储重复的元素。 - 可变大小:
List
集合的大小可以根据需要进行动态调整。 - 基本操作:
List
接口定义了许多基本操作,如添加、删除、获取、查找等。
常用方法
-
添加元素:
void add(int index, E element)
:在指定索引位置插入指定元素。
-
添加多个元素:
boolean addAll(Collection<? extends E> c)
:将指定集合中的所有元素添加到列表的末尾。
-
通过索引获取元素:
E get(int index)
:返回列表中指定索引位置的元素。
-
查找元素索引:
int indexOf(Object element)
:返回指定元素第一次出现的索引。int lastIndexOf(Object element)
:返回指定元素最后一次出现的索引。
-
删除元素:
E remove(int index)
:移除并返回指定索引位置的元素。
-
替换元素:
E set(int index, E element)
:用指定元素替换列表中指定索引位置的元素。
-
获取子列表:
List<E> subList(int fromIndex, int toIndex)
:返回列表的一个子列表,包括fromIndex
,不包括toIndex
。
常见实现类:
Java 中提供了多个实现了 List
接口的类,其中常见的实现类包括:
ArrayList
:基于动态数组实现的列表,适用于随机访问和遍历。LinkedList
:基于双向链表实现的列表,适用于插入和删除操作频繁的场景。Vector
:与ArrayList
类似,但是线程安全,不推荐在新代码中使用。Stack
:基于堆栈的实现,继承自Vector
,不推荐在新代码中使用。
使用场景:
- 当需要维护元素的顺序,并且可能有重复元素时,可以选择使用
List
接口。 - 当需要频繁进行插入和删除操作时,可以根据具体场景选择使用
ArrayList
或LinkedList
。通常使用LinkedList。
总之,List
接口在 Java 集合框架中提供了对有序元素集合的操作和处理方法,允许存储重复元素,并且有多种实现类可供选择。
常用方法的代码:
public class ListMethods {
public static void main(String[] args) {
List list = new ArrayList();
//通过索引添加一个元素
list.add("hello");
list.add("world");
list.add(1,"ret");
System.out.println(list);
//通过索引一次性添加多个元素
List list1 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(1);
list.addAll(list1);
System.out.println(list);
//通过索引获取元素
System.out.println(list.get(2));
//返回元素在集合中首次出现的位置,没有则返回-1
System.out.println(list.indexOf("ret"));
//返回元素在集合中最后出现的位置,没有则返回-1
System.out.println(list.lastIndexOf(1));
//删除指定元素的位置并返回此元素
System.out.println(list.remove(1));
System.out.println(list);
//将指定位置的位置替换为xxx,并返回此元素
System.out.println(list.set(1,"ret"));
System.out.println(list);
//返回一个子集合,左闭右开
System.out.println(list.subList(0,2));
}
}