List 是 Java 集合框架中的一种集合类型,它表示一个有序、可重复的集合。在 List 中,元素按照插入顺序排列,并且可以包含相同的元素。
Java 提供了java.util.List
接口来定义List
集合的常用行为和操作方法。List
接口继承自Collection
接口,因此List
也具备了Collection
的基本特性和方法。
下面是一些常见的 List 实现类:
ArrayList
:基于数组实现的动态数组,支持快速随机访问元素。LinkedList
:基于链表实现的双向链表,支持高效地插入和删除操作。Vector
:与 ArrayList 类似,但是线程安全,适用于多线程环境。Stack
:堆栈数据结构的实现,继承自 Vector。
这些List
实现类都实现了List
接口,并提供了各自的特点和优势,你可以根据具体需求选择合适的实现类。 你可以使用List
来存储一组对象,并通过索引访问、添加、删除或修改其中的元素。例如,你可以使用add()
方法将元素添加到列表末尾,使用get()
方法获取指定位置的元素,使用remove()
方法删除指定位置的元素等。
以下是List
接口中常用的一些方法:
add(E element)
:将指定元素添加到列表的末尾。get(int index)
:返回指定位置处的元素。remove(int index)
:删除指定位置处的元素,并返回被删除的元素。size()
:返回列表中的元素个数。isEmpty()
:判断列表是否为空。contains(Object element)
:判断列表是否包含指定元素。
这只是List
接口提供的一部分方法,还有其他更多方法可以用于操作和管理List
集合。
List的特点
List 的特点包括:
- 有序性:List 中的元素按照插入顺序排列,即元素在列表中的位置是有意义的。你可以根据索引来访问和操作列表中的元素。
- 可重复性:List 允许存储相同的元素。这意味着你可以向 List 中添加多个相同的元素,并且它们会保留各自的插入顺序。
- 动态大小:List 的大小是可变的,也就是说,在运行时可以随意添加或删除元素。这使得 List 对于需要频繁增删元素的场景非常适用。
- 提供索引访问:List 实现了 RandomAccess 接口,因此可以通过索引快速访问列表中的元素。这使得对列表进行遍历、查找和修改等操作更加高效。
- 支持多种实现类:Java 提供了多种 List 的实现类,如 ArrayList、LinkedList 等,每个实现类都有其特定的优势和适用场景。
- 继承 Collection 接口:List 接口继承自 Collection 接口,因此具备了 Collection 接口定义的方法和特性,如添加、删除、查询、迭代等。
总之,List 是一种有序、可重复、动态大小的集合类型,提供了方便的索引访问和操作元素的方法。它在许多场景中都是非常常用和实用的集合类型。
List接口的of()
方法
List接口的of()
方法是Java 9中引入的一个静态工厂方法,它允许我们创建一个不可变的、包含指定元素的列表。这个方法可以用于快速创建一个具有固定元素的List
集合。该方法的签名如下:
static <E> List<E> of(E... elements)
使用of()
方法时,你可以传入任意数量的参数作为列表的元素,然后该方法会返回一个包含这些元素的不可变列表。例如:
List<String> list = List.of("apple", "banana", "orange");
在上面的例子中,我们创建了一个包含三个字符串元素的列表。注意,由于列表是不可变的,因此不能对其进行添加、删除或修改操作。如果尝试这样做,将会抛出UnsupportedOperationException
异常。
of()
方法最多只能接受10
个参数。如果需要更多的元素,可以考虑使用其他方式来创建列表,比如通过Arrays.asList()
方法或者创建一个可变的ArrayList
并逐个添加元素。List.of()
方法不接受null
值,如果传入null
,会抛出NullPointerException
异常。
Arrays.asList()
方法
Arrays.asList(
)方法是一个用于将数组转换为List
集合的便捷方法。它接受一个数组作为参数,并返回一个包含相同元素的固定大小的List
。下面是使用Arrays.asList()
方法的示例代码:
String[] array = {"apple", "banana", "orange"};
List<String> list = Arrays.asList(array);
System.out.println(list);
输出结果将会是:[apple, banana, orange]。
Arrays.asList()
方法返回的是一个固定大小的List
,这意味着你不能对其进行添加或删除操作。如果尝试修改该列表的大小,例如调用add(
)、remove()
等方法,将会抛出UnsupportedOperationException
异常。
如果你需要一个可变大小的List,可以通过创建一个新的ArrayList来实现:
List<String> mutableList = new ArrayList<>(Arrays.asList(array));
mutableList.add("grape");
mutableList.remove("banana");
System.out.println(mutableList);
输出结果将会是:[apple, orange, grape]。
遍历一个List
遍历一个List
有多种方式,下面我将介绍几种常见的方法:
- 使用
for
循环:
List<String> list = Arrays.asList("apple", "banana", "orange");
for (int i = 0; i < list.size(); i++) {
String element = list.get(i);
System.out.println(element);
}
- 使用增强型
for
循环(foreach
循环):
List<String> list = Arrays.asList("apple", "banana", "orange");
for (String element : list) {
System.out.println(element);
}
- 使用迭代器(
Iterator
):
List<String> list = Arrays.asList("apple", "banana", "orange");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
- 使用Java 8的Stream API:
List<String> list = Arrays.asList("apple", "banana", "orange");
list.stream().forEach(System.out::println);
这些方法都可以用来遍历List集合中的元素。你可以根据具体的需求选择适合的遍历方式。
List
和Array
转换
要将List
转换为Array
,可以使用toArray()
方法。以下是一个示例:
import java.util.ArrayList;
import java.util.List;
public class ListToArrayExample {
public static void main(String[] args) {
// 创建一个List
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// 将List转换为Array
String[] array = list.toArray(new String[0]);
// 打印Array中的元素
for (String fruit : array) {
System.out.println(fruit);
}
}
}
要将Array
转换为Lis
t,可以使用Arrays.asList()
方法。以下是一个示例:
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 创建一个Array
String[] array = {"Apple", "Banana", "Orange"};
// 将Array转换为List
List<String> list = Arrays.asList(array);
// 打印List中的元素
for (String fruit : list) {
System.out.println(fruit);
}
}
}
在将
Array
转换为List
时,返回的List
是一个固定大小的列表,不支持添加或删除元素操作。如果需要对列表进行修改,请创建一个新的ArrayList
并传递Array
作为参数。