跳转至

Java List 与 ArrayList 示例详解

简介

在 Java 编程中,List 是一个非常重要的接口,它提供了有序的元素集合,允许重复元素。ArrayList 则是 List 接口的一个具体实现类,具有动态数组的特性。本文将详细介绍 ListArrayList 的基础概念、使用方法、常见实践以及最佳实践,并通过丰富的代码示例帮助读者更好地理解和应用。

目录

  1. 基础概念
    • List 接口
    • ArrayList 类
  2. 使用方法
    • 创建 ArrayList
    • 添加元素
    • 访问元素
    • 修改元素
    • 删除元素
  3. 常见实践
    • 遍历 ArrayList
    • 查找元素
    • 排序 ArrayList
  4. 最佳实践
    • 初始化容量
    • 避免频繁的插入和删除操作
    • 使用合适的方法
  5. 小结
  6. 参考资料

基础概念

List 接口

List 是 Java 集合框架中的一个接口,它继承自 Collection 接口。List 接口的特点是有序(元素存入集合的顺序和取出的顺序一致),并且允许元素重复。List 接口提供了丰富的方法来操作元素,例如添加、删除、查找等。

ArrayList 类

ArrayListList 接口的一个可变大小数组的实现。它允许所有元素,包括 nullArrayList 底层使用数组来存储元素,这使得它在随机访问元素时效率很高,但在插入和删除元素时性能相对较差,尤其是在列表中间进行操作时。

使用方法

创建 ArrayList

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

public class ArrayListExample {
    public static void main(String[] args) {
        // 创建一个空的 ArrayList
        List<String> list1 = new ArrayList<>();

        // 创建一个指定初始容量的 ArrayList
        List<Integer> list2 = new ArrayList<>(10);

        // 创建一个包含初始元素的 ArrayList
        List<Double> list3 = new ArrayList<>(List.of(1.1, 2.2, 3.3));
    }
}

添加元素

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        // 添加单个元素
        list.add("Apple");
        list.add("Banana");

        // 在指定位置添加元素
        list.add(1, "Cherry");

        System.out.println(list);
    }
}

访问元素

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 通过索引访问元素
        String element = list.get(1);
        System.out.println(element);
    }
}

修改元素

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 修改指定位置的元素
        list.set(1, "Durian");
        System.out.println(list);
    }
}

删除元素

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 删除指定元素
        list.remove("Banana");

        // 删除指定位置的元素
        list.remove(1);

        System.out.println(list);
    }
}

常见实践

遍历 ArrayList

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 使用 for 循环遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        // 使用增强 for 循环遍历
        for (String element : list) {
            System.out.println(element);
        }

        // 使用迭代器遍历
        list.forEach(System.out::println);
    }
}

查找元素

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

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 查找元素的索引
        int index = list.indexOf("Banana");
        System.out.println("Index of Banana: " + index);

        // 判断元素是否存在
        boolean exists = list.contains("Durian");
        System.out.println("Does Durian exist? " + exists);
    }
}

排序 ArrayList

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(2);

        // 升序排序
        Collections.sort(list);
        System.out.println("Ascending order: " + list);

        // 降序排序
        Collections.sort(list, Collections.reverseOrder());
        System.out.println("Descending order: " + list);
    }
}

最佳实践

初始化容量

在创建 ArrayList 时,如果能够提前知道大概需要存储的元素数量,最好指定初始容量,这样可以减少动态扩容带来的性能开销。

List<Integer> list = new ArrayList<>(100);

避免频繁的插入和删除操作

由于 ArrayList 底层是数组实现,频繁在中间位置插入和删除元素会导致大量元素的移动,影响性能。如果需要频繁进行插入和删除操作,考虑使用 LinkedList

使用合适的方法

在进行操作时,要根据具体需求选择合适的方法。例如,查找元素时使用 contains 方法比手动遍历效率更高。

小结

本文详细介绍了 Java 中的 List 接口和 ArrayList 类,包括基础概念、使用方法、常见实践以及最佳实践。通过学习这些内容,读者可以更好地理解和应用 ArrayList,在实际编程中提高代码的效率和质量。

参考资料