跳转至

Java 中如何初始化 ArrayList

简介

在 Java 编程中,ArrayList 是一个非常常用的动态数组实现类,它位于 java.util 包下。初始化 ArrayList 是我们在使用它之前必须要做的操作,不同的初始化方式适用于不同的场景。本文将详细介绍 Java 中初始化 ArrayList 的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用 ArrayList 的初始化操作。

目录

  1. 基础概念
  2. 使用方法
    • 无参构造函数初始化
    • 带初始容量的构造函数初始化
    • 使用 Arrays.asList() 方法初始化
    • 使用匿名内部类初始化
    • Java 8 Stream 初始化
  3. 常见实践
    • 初始化空列表并添加元素
    • 从另一个集合初始化
  4. 最佳实践
  5. 小结
  6. 参考资料

基础概念

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 版)