跳转至

Java 中初始化 ArrayList 的方法详解

简介

在 Java 编程中,ArrayList 是一个非常常用的动态数组类,它位于 java.util 包下。ArrayList 可以动态地增加和减少元素,并且能灵活地调整数组大小。正确地初始化 ArrayList 是使用它的基础,本文将详细介绍在 Java 中初始化 ArrayList 的各种方法,包括基础概念、使用方法、常见实践和最佳实践。

目录

  1. 基础概念
  2. 使用方法
    • 无参构造函数初始化
    • 带初始容量的构造函数初始化
    • 使用 Arrays.asList() 方法初始化
    • 使用匿名内部类初始化
    • 使用 Java 8 的 Stream API 初始化
  3. 常见实践
    • 初始化空的 ArrayList 并逐步添加元素
    • 从另一个集合初始化 ArrayList
  4. 最佳实践
    • 根据场景选择合适的初始化方法
    • 考虑性能和代码可读性
  5. 小结
  6. 参考资料

基础概念

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 核心技术》