Java 中如何初始化 ArrayList
简介
在 Java 编程中,ArrayList
是一个非常常用的动态数组实现类,它位于 java.util
包下。初始化 ArrayList
是我们在使用它之前必须要做的操作,不同的初始化方式适用于不同的场景。本文将详细介绍 Java 中初始化 ArrayList
的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用 ArrayList
的初始化操作。
目录
- 基础概念
- 使用方法
- 无参构造函数初始化
- 带初始容量的构造函数初始化
- 使用
Arrays.asList()
方法初始化 - 使用匿名内部类初始化
- Java 8 Stream 初始化
- 常见实践
- 初始化空列表并添加元素
- 从另一个集合初始化
- 最佳实践
- 小结
- 参考资料
基础概念
ArrayList
是 Java 集合框架中的一部分,它实现了 List
接口,底层基于数组实现。与普通数组不同的是,ArrayList
可以动态增长和收缩,因此非常适合在元素数量不确定的情况下使用。初始化 ArrayList
就是为其分配内存空间并创建一个可以存储元素的容器。
使用方法
无参构造函数初始化
使用无参构造函数创建一个空的 ArrayList
,初始容量为 10。当添加元素时,如果容量不足,ArrayList
会自动扩容。
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);
}
}
带初始容量的构造函数初始化
如果我们预先知道要存储的元素数量,可以使用带初始容量的构造函数,这样可以减少扩容的次数,提高性能。
import java.util.ArrayList;
import java.util.List;
public class ArrayListInitializationWithCapacity {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(20);
for (int i = 0; i < 20; i++) {
list.add(i);
}
System.out.println(list);
}
}
使用 Arrays.asList()
方法初始化
Arrays.asList()
方法可以将一个数组或多个元素转换为一个 List
,然后可以将其传递给 ArrayList
的构造函数进行初始化。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListInitializationWithArraysAsList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("red", "green", "blue"));
System.out.println(list);
}
}
使用匿名内部类初始化
可以使用匿名内部类的方式在创建 ArrayList
时直接添加元素。
import java.util.ArrayList;
import java.util.List;
public class ArrayListInitializationWithAnonymousClass {
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 初始化
Java 8 引入了 Stream API,可以使用 Stream
来初始化 ArrayList
。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ArrayListInitializationWithStream {
public static void main(String[] args) {
List<String> list = Stream.of("dog", "cat", "bird")
.collect(Collectors.toCollection(ArrayList::new));
System.out.println(list);
}
}
常见实践
初始化空列表并添加元素
在很多情况下,我们需要先创建一个空的 ArrayList
,然后根据业务逻辑逐步添加元素。
import java.util.ArrayList;
import java.util.List;
public class InitializeEmptyListAndAddElements {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("strawberry");
fruits.add("grape");
fruits.add("mango");
System.out.println(fruits);
}
}
从另一个集合初始化
如果已经有一个集合,我们可以直接使用它来初始化一个新的 ArrayList
。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class InitializeFromAnotherCollection {
public static void main(String[] args) {
List<Integer> sourceList = Arrays.asList(10, 20, 30);
List<Integer> newList = new ArrayList<>(sourceList);
System.out.println(newList);
}
}
最佳实践
- 如果预先知道元素数量,使用带初始容量的构造函数初始化,避免不必要的扩容。
- 尽量使用
Arrays.asList()
或 Java 8 Stream 来初始化ArrayList
,代码更简洁。 - 避免使用匿名内部类初始化,因为它会创建额外的类文件,可能会影响性能。
小结
本文详细介绍了 Java 中初始化 ArrayList
的多种方法,包括无参构造函数、带初始容量的构造函数、Arrays.asList()
方法、匿名内部类和 Java 8 Stream 等。同时,还给出了常见实践和最佳实践建议。读者可以根据具体的业务场景选择合适的初始化方式,以提高代码的性能和可读性。
参考资料
- 《Effective Java》
- Java 编程思想(第 4 版)