在 Java 中创建 ArrayList 的全面指南
简介
在 Java 编程世界里,ArrayList
是一个极为常用且强大的工具,用于存储和管理一组对象。它提供了动态数组的功能,允许我们灵活地添加、删除和访问元素。了解如何创建 ArrayList
是有效使用这一数据结构的基础,本文将深入探讨创建 ArrayList
的相关知识,从基础概念到最佳实践,帮助你熟练掌握这一重要技能。
目录
- 基础概念
- 使用方法
- 无参构造创建
- 带初始容量创建
- 基于集合创建
- 常见实践
- 基本数据类型的包装类存储
- 自定义对象存储
- 最佳实践
- 预分配合适容量
- 不可变集合创建
- 小结
- 参考资料
基础概念
ArrayList
是 Java 集合框架中的一部分,它实现了 List
接口。与传统的数组不同,ArrayList
的大小是动态变化的,我们无需预先指定其确切的大小。它在内部使用数组来存储元素,当元素数量超过当前容量时,会自动扩容。
ArrayList
允许存储重复元素,并且可以存储 null
值。它保持元素的插入顺序,即元素的存储顺序与添加顺序一致。
使用方法
无参构造创建
使用无参构造函数创建 ArrayList
时,它会创建一个初始容量为 10 的空列表。随着元素的添加,列表会根据需要自动扩容。
import java.util.ArrayList;
import java.util.List;
public class ArrayListCreationExample {
public static void main(String[] args) {
// 创建一个空的 ArrayList
List<String> stringList = new ArrayList<>();
// 添加元素
stringList.add("Apple");
stringList.add("Banana");
stringList.add("Cherry");
System.out.println(stringList);
}
}
带初始容量创建
通过指定初始容量来创建 ArrayList
,可以避免频繁的扩容操作,提高性能。如果我们预先知道大概需要存储多少个元素,这种方式非常有用。
import java.util.ArrayList;
import java.util.List;
public class ArrayListWithInitialCapacityExample {
public static void main(String[] args) {
// 创建一个初始容量为 20 的 ArrayList
List<Integer> integerList = new ArrayList<>(20);
for (int i = 0; i < 15; i++) {
integerList.add(i);
}
System.out.println(integerList);
}
}
基于集合创建
我们还可以通过已有的集合来创建 ArrayList
,将已有集合中的元素全部添加到新的 ArrayList
中。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListFromCollectionExample {
public static void main(String[] args) {
// 创建一个初始集合
List<String> initialList = Arrays.asList("One", "Two", "Three");
// 基于初始集合创建 ArrayList
List<String> newList = new ArrayList<>(initialList);
System.out.println(newList);
}
}
常见实践
基本数据类型的包装类存储
由于 ArrayList
只能存储对象,所以当我们要存储基本数据类型时,需要使用其对应的包装类,如 Integer
对应 int
,Double
对应 double
等。
import java.util.ArrayList;
import java.util.List;
public class ArrayListWithPrimitiveWrapperExample {
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);
System.out.println(intList);
}
}
自定义对象存储
我们可以将自定义的类对象存储在 ArrayList
中。例如,创建一个 Person
类,并将多个 Person
对象存储在 ArrayList
里。
import java.util.ArrayList;
import java.util.List;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class ArrayListWithCustomObjectExample {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 25));
personList.add(new Person("Bob", 30));
System.out.println(personList);
}
}
最佳实践
预分配合适容量
如前所述,通过指定初始容量可以避免频繁的扩容操作。频繁的扩容会带来性能开销,因为每次扩容时需要创建一个新的更大的数组,并将原数组中的元素复制到新数组中。所以,如果我们能提前预估 ArrayList
中大概会存储多少元素,尽量在创建时指定合适的初始容量。
不可变集合创建
有时候我们希望创建一个不可变的 ArrayList
,即创建后不能再对其进行添加、删除或修改元素的操作。可以使用 Collections.unmodifiableList
方法来实现。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ImmutableArrayListExample {
public static void main(String[] args) {
List<String> originalList = new ArrayList<>();
originalList.add("A");
originalList.add("B");
List<String> immutableList = Collections.unmodifiableList(originalList);
// 下面这行代码会抛出 UnsupportedOperationException 异常
// immutableList.add("C");
System.out.println(immutableList);
}
}
小结
本文详细介绍了在 Java 中创建 ArrayList
的多种方式,包括基础概念、不同的创建方法、常见实践以及最佳实践。通过掌握这些知识,你可以更加灵活、高效地使用 ArrayList
来满足不同的编程需求。无论是处理简单的字符串、数字列表,还是复杂的自定义对象集合,ArrayList
都能提供强大的支持。
参考资料
- Oracle Java 官方文档 - ArrayList
- 《Effective Java》 - Joshua Bloch