Java 列表与数组的区别

Java中提供了列表(List)和数组(Array)两种数据结构,它们在存储和访问数据上有着不同的特点和用途。本文将详细介绍列表和数组的区别,并给出相应的代码示例。

列表(List)

列表(List)是一种动态数组,它可以根据需要自动扩展或缩小。Java中的列表是通过java.util.ArrayList实现的。列表具有以下特点:

  1. 列表可以存储不同类型的数据,包括基本类型和对象类型。
  2. 列表的长度是可变的,可以根据需要动态调整。
  3. 列表具有丰富的操作方法,如增加、删除、查找、排序等。

下面是一个使用列表的示例代码:

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

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

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 访问元素
        System.out.println(fruits.get(0)); // 输出:Apple

        // 删除元素
        fruits.remove(1);

        // 遍历元素
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

上述代码中,我们使用ArrayList来创建一个字符串列表,然后通过add方法添加元素,通过get方法访问元素,通过remove方法删除元素,并通过for-each循环遍历列表中的元素。

数组(Array)

数组(Array)是一种固定长度的数据结构,它存储的是相同类型的元素。Java中的数组可以是基本类型的数组(如int[]float[])或者对象类型的数组(如String[]Object[])。数组具有以下特点:

  1. 数组的长度是固定的,在创建时需要指定长度,并不能动态改变。
  2. 数组只能存储相同类型的元素。
  3. 数组直接存储在内存中的连续空间上,可以更高效地访问元素。

下面是一个使用数组的示例代码:

public class ArrayExample {
    public static void main(String[] args) {
        String[] fruits = new String[3];

        // 添加元素
        fruits[0] = "Apple";
        fruits[1] = "Banana";
        fruits[2] = "Orange";

        // 访问元素
        System.out.println(fruits[0]); // 输出:Apple

        // 删除元素(将元素置为null)
        fruits[1] = null;

        // 遍历元素
        for (String fruit : fruits) {
            if (fruit != null) {
                System.out.println(fruit);
            }
        }
    }
}

上述代码中,我们使用String[]来创建一个字符串数组,通过索引访问和操作数组中的元素。需要注意的是,当需要删除数组中的元素时,我们不能直接删除,而是将对应位置的元素置为null来表示删除。

列表与数组的对比

下表列出了列表和数组在几个方面的对比:

列表(List) 数组(Array)
动态长度
存储不同类型的元素
操作方法丰富
访问元素效率 较低 较高
内存占用 较大 较小

从上表可以看出,列表和数组在动态长度、存储不同类型的元素和操作方法丰富等方面都是列表具有优势。而数组在访问元素效率和内存占用方面相对较优。因此,在选择使用列表还是数组时,需要根据具体的需求和场景进行选择。

类图

下面是一个简化的类图,展示了列表和数组的关系:

classDiagram
    class List
    class ArrayList
    class Array

上述类图中,List是列表的抽象类,ArrayList