跳转至

Java 中 ArrayList 的实例化

简介

在 Java 编程里,ArrayList 是极为常用的动态数组实现类,隶属于 Java 集合框架。它位于 java.util 包下,继承自 AbstractList 类并实现了 List 接口。ArrayList 能够动态地调整大小,方便存储和操作对象集合。本文会全面介绍 Java 中 ArrayList 的实例化相关内容,涵盖基础概念、使用方法、常见实践与最佳实践,助力读者深入理解并高效运用。

目录

  1. 基础概念
  2. 使用方法
  3. 常见实践
  4. 最佳实践
  5. 小结
  6. 参考资料

基础概念

ArrayList 本质上是一种基于动态数组的数据结构,它可根据需要自动调整容量。与传统数组不同,ArrayList 无需在创建时指定固定大小,能动态添加或删除元素。其内部借助数组来存储元素,当元素数量超出当前容量时,会自动创建一个更大的数组并将原有元素复制过去。

ArrayList 具备以下特性: - 动态调整大小:能根据元素数量自动扩充或收缩容量。 - 允许存储重复元素:可在 ArrayList 中存储多个相同的元素。 - 支持随机访问:能通过索引快速访问任意位置的元素。 - 可存储不同类型的对象:可存储 Object 类型的对象,意味着能存储不同类型的元素。

使用方法

导入包

在使用 ArrayList 之前,需要导入 java.util.ArrayList 包:

import java.util.ArrayList;

实例化 ArrayList

以下是几种常见的实例化 ArrayList 的方式:

无参构造函数

使用无参构造函数创建一个初始容量为 10 的空 ArrayList

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // 实例化一个空的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        // 添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        System.out.println(list);
    }
}

指定初始容量

使用带初始容量参数的构造函数创建一个指定初始容量的 ArrayList

import java.util.ArrayList;

public class ArrayListWithInitialCapacity {
    public static void main(String[] args) {
        // 实例化一个初始容量为 20 的 ArrayList
        ArrayList<Integer> numbers = new ArrayList<>(20);
        for (int i = 0; i < 10; i++) {
            numbers.add(i);
        }
        System.out.println(numbers);
    }
}

从其他集合创建

使用包含另一个集合作为参数的构造函数,将另一个集合的元素复制到新的 ArrayList 中:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListFromAnotherCollection {
    public static void main(String[] args) {
        // 创建一个包含元素的 List
        List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
        // 从另一个集合创建 ArrayList
        ArrayList<String> fruitList = new ArrayList<>(fruits);
        System.out.println(fruitList);
    }
}

常见实践

添加元素

使用 add() 方法向 ArrayList 中添加元素:

import java.util.ArrayList;

public class AddElementsToArrayList {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>();
        // 添加单个元素
        colors.add("Red");
        colors.add("Green");
        // 在指定位置插入元素
        colors.add(1, "Blue");
        System.out.println(colors);
    }
}

访问元素

使用 get() 方法根据索引访问 ArrayList 中的元素:

import java.util.ArrayList;

public class AccessElementsInArrayList {
    public static void main(String[] args) {
        ArrayList<String> animals = new ArrayList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Bird");
        // 访问指定索引的元素
        String firstAnimal = animals.get(0);
        System.out.println("First animal: " + firstAnimal);
    }
}

修改元素

使用 set() 方法修改 ArrayList 中指定索引位置的元素:

import java.util.ArrayList;

public class ModifyElementsInArrayList {
    public static void main(String[] args) {
        ArrayList<String> days = new ArrayList<>();
        days.add("Monday");
        days.add("Tuesday");
        // 修改指定索引的元素
        days.set(1, "Wednesday");
        System.out.println(days);
    }
}

删除元素

使用 remove() 方法删除 ArrayList 中的元素:

import java.util.ArrayList;

public class RemoveElementsFromArrayList {
    public static void main(String[] args) {
        ArrayList<String> countries = new ArrayList<>();
        countries.add("USA");
        countries.add("UK");
        countries.add("Canada");
        // 删除指定索引的元素
        countries.remove(1);
        System.out.println(countries);
    }
}

最佳实践

初始容量的选择

若能预估 ArrayList 所需的大致元素数量,建议在实例化时指定初始容量,以减少扩容操作带来的性能开销。例如:

import java.util.ArrayList;

public class OptimalInitialCapacity {
    public static void main(String[] args) {
        // 预估需要存储 100 个元素
        ArrayList<String> items = new ArrayList<>(100);
        for (int i = 0; i < 100; i++) {
            items.add("Item " + i);
        }
    }
}

使用泛型

使用泛型可确保 ArrayList 中只存储指定类型的元素,避免运行时类型转换错误。例如:

import java.util.ArrayList;

public class UseGenerics {
    public static void main(String[] args) {
        // 只存储 String 类型的元素
        ArrayList<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        // 编译时错误,不能添加非 String 类型的元素
        // names.add(123); 
    }
}

避免频繁删除操作

由于 ArrayList 是基于数组实现的,频繁删除元素会导致数组元素的移动,影响性能。若需要频繁删除元素,可考虑使用 LinkedList

小结

本文详细介绍了 Java 中 ArrayList 的实例化相关内容。通过了解 ArrayList 的基础概念、掌握不同的实例化方式以及常见的使用方法和实践,读者可以在实际开发中灵活运用 ArrayList。同时,遵循最佳实践能提高代码的性能和可维护性。

参考资料

希望本文能帮助读者更好地理解和使用 Java 中的 ArrayList 实例化。