跳转至

在 Java 中创建 ArrayList 的全面指南

简介

在 Java 编程世界里,ArrayList 是一个极为常用且强大的工具,用于存储和管理一组对象。它提供了动态数组的功能,允许我们灵活地添加、删除和访问元素。了解如何创建 ArrayList 是有效使用这一数据结构的基础,本文将深入探讨创建 ArrayList 的相关知识,从基础概念到最佳实践,帮助你熟练掌握这一重要技能。

目录

  1. 基础概念
  2. 使用方法
    • 无参构造创建
    • 带初始容量创建
    • 基于集合创建
  3. 常见实践
    • 基本数据类型的包装类存储
    • 自定义对象存储
  4. 最佳实践
    • 预分配合适容量
    • 不可变集合创建
  5. 小结
  6. 参考资料

基础概念

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 对应 intDouble 对应 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 都能提供强大的支持。

参考资料