Java 中初始化 ArrayList 的方法详解
简介
在 Java 编程中,ArrayList
是一个非常常用的动态数组类,它位于 java.util
包下。ArrayList
可以动态地增加和减少元素,并且能灵活地调整数组大小。正确地初始化 ArrayList
是使用它的基础,本文将详细介绍在 Java 中初始化 ArrayList
的各种方法,包括基础概念、使用方法、常见实践和最佳实践。
目录
- 基础概念
- 使用方法
- 无参构造函数初始化
- 带初始容量的构造函数初始化
- 使用
Arrays.asList()
方法初始化 - 使用匿名内部类初始化
- 使用 Java 8 的 Stream API 初始化
- 常见实践
- 初始化空的
ArrayList
并逐步添加元素 - 从另一个集合初始化
ArrayList
- 初始化空的
- 最佳实践
- 根据场景选择合适的初始化方法
- 考虑性能和代码可读性
- 小结
- 参考资料
基础概念
ArrayList
是 Java 集合框架中的一个类,它实现了 List
接口。ArrayList
内部使用数组来存储元素,当元素数量超过数组容量时,会自动进行扩容。初始化 ArrayList
就是为其分配内存空间,并可以选择预先填充一些元素。
使用方法
无参构造函数初始化
使用无参构造函数创建一个空的 ArrayList
,初始容量为 10。当添加元素时,如果容量不足,会自动进行扩容。
import java.util.ArrayList;
import java.util.List;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用无参构造函数初始化
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println(list);
}
}
带初始容量的构造函数初始化
如果预先知道 ArrayList
大致需要存储的元素数量,可以使用带初始容量的构造函数,避免频繁的扩容操作,提高性能。
import java.util.ArrayList;
import java.util.List;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用带初始容量的构造函数初始化
List<Integer> list = new ArrayList<>(20);
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list);
}
}
使用 Arrays.asList()
方法初始化
Arrays.asList()
方法可以将数组转换为 List
,然后可以用这个 List
来初始化 ArrayList
。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用 Arrays.asList() 方法初始化
String[] array = {"cat", "dog", "bird"};
List<String> list = new ArrayList<>(Arrays.asList(array));
System.out.println(list);
}
}
使用匿名内部类初始化
可以使用匿名内部类在初始化 ArrayList
时直接添加元素。
import java.util.ArrayList;
import java.util.List;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用匿名内部类初始化
List<Double> list = new ArrayList<Double>() {{
add(1.1);
add(2.2);
add(3.3);
}};
System.out.println(list);
}
}
使用 Java 8 的 Stream API 初始化
Java 8 引入的 Stream API 可以方便地初始化 ArrayList
。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用 Java 8 的 Stream API 初始化
List<Integer> list = IntStream.range(0, 5)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));
System.out.println(list);
}
}
常见实践
初始化空的 ArrayList
并逐步添加元素
在很多场景下,我们并不知道需要存储多少元素,此时可以先初始化一个空的 ArrayList
,然后在程序运行过程中逐步添加元素。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ArrayListInitialization {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入元素,输入 end 结束:");
String input;
while (!(input = scanner.nextLine()).equals("end")) {
list.add(input);
}
System.out.println(list);
scanner.close();
}
}
从另一个集合初始化 ArrayList
如果已经有一个集合,可以直接用这个集合来初始化 ArrayList
。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ArrayListInitialization {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("red");
set.add("green");
set.add("blue");
List<String> list = new ArrayList<>(set);
System.out.println(list);
}
}
最佳实践
根据场景选择合适的初始化方法
- 如果预先知道元素数量,使用带初始容量的构造函数。
- 如果已经有一个数组或集合,使用
Arrays.asList()
或直接用集合初始化。 - 如果需要动态添加元素,先初始化一个空的
ArrayList
。
考虑性能和代码可读性
- 避免频繁的扩容操作,选择合适的初始容量。
- 代码要简洁易懂,避免使用过于复杂的初始化方式。
小结
本文详细介绍了在 Java 中初始化 ArrayList
的多种方法,包括无参构造函数、带初始容量的构造函数、Arrays.asList()
方法、匿名内部类和 Java 8 的 Stream API 等。同时,给出了常见实践和最佳实践,帮助读者根据不同的场景选择合适的初始化方法。希望读者通过本文能深入理解并高效使用 ArrayList
的初始化。
参考资料
- 《Effective Java》
- 《Java 核心技术》