请描述List和数组之间相互转换的具体过程

参考回答

在 Java 中,List 和数组可以相互转换。以下是具体的转换方式和示例代码:


1. 从数组转换为 List

Java 提供了多个方法将数组转换为 List

1.1 使用 Arrays.asList()

  • 方法描述:将数组转换为一个固定大小的 List,原数组和生成的 List 是共享数据的(即修改其中一个会影响另一个)。
  • 注意:转换后的 List 不能调整大小(如 add()remove() 操作会抛出 UnsupportedOperationException)。

代码示例

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

public class ArrayToListExample {
    public static void main(String[] args) {
        // 定义数组
        String[] array = {"A", "B", "C"};

        // 数组转换为 List
        List<String> list = Arrays.asList(array);

        // 输出 List
        System.out.println(list); // 输出:[A, B, C]

        // 修改数组会影响 List
        array[0] = "Z";
        System.out.println(list); // 输出:[Z, B, C]
    }
}

1.2 使用 ArrayList 构造函数

  • 方法描述:创建一个新的 ArrayList,将数组中的元素拷贝到 List 中。新生成的 List 不会受原数组的影响。

代码示例

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

public class ArrayToListExample {
    public static void main(String[] args) {
        // 定义数组
        String[] array = {"A", "B", "C"};

        // 使用 ArrayList 构造函数
        List<String> list = new ArrayList<>(Arrays.asList(array));

        // 修改 List 不会影响原数组
        list.add("D");
        System.out.println(list); // 输出:[A, B, C, D]
        System.out.println(Arrays.toString(array)); // 输出:[A, B, C]
    }
}

1.3 使用 Collections.addAll()

  • 方法描述:将数组中的所有元素添加到现有的 List 中。
  • 适用场景:可以向现有的 List 添加数组中的元素。

代码示例

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

public class ArrayToListExample {
    public static void main(String[] args) {
        // 定义数组
        String[] array = {"A", "B", "C"};

        // 创建一个空的 List 并添加数组元素
        List<String> list = new ArrayList<>();
        Collections.addAll(list, array);

        // 输出 List
        System.out.println(list); // 输出:[A, B, C]
    }
}

2. 从 List 转换为数组

Java 提供了多个方法将 List 转换为数组:

2.1 使用 toArray() 方法

  • 方法描述:将 List 转换为数组。
  • 注意:需要指定目标数组的类型。

代码示例

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

public class ListToArrayExample {
    public static void main(String[] args) {
        // 定义 List
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        // 转换为数组
        String[] array = list.toArray(new String[0]);

        // 输出数组
        for (String s : array) {
            System.out.println(s); // 输出:A B C
        }
    }
}

2.2 使用流(Stream)API

  • 方法描述:通过 Java 8 的流操作,将 List 转换为数组。
  • 优点:代码简洁,适用于 Java 8 及以上版本。

代码示例

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

public class ListToArrayExample {
    public static void main(String[] args) {
        // 定义 List
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        // 使用 Stream 转换为数组
        String[] array = list.stream().toArray(String[]::new);

        // 输出数组
        for (String s : array) {
            System.out.println(s); // 输出:A B C
        }
    }
}

3. 注意事项

3.1 从数组到 List

  • 使用 Arrays.asList() 时,生成的 List 是固定大小的,不能增删元素。
  • 如果需要一个可以动态修改大小的 List,可以使用 new ArrayList<>(Arrays.asList(array))

3.2 从 List 到数组

  • List 转换为数组时,目标数组的类型需要匹配 List 元素的类型。
  • 推荐使用 list.toArray(new String[0]),效率较高且易于理解。

4. 总结对比表

操作 方法 特点
数组转 List Arrays.asList(array) 固定大小的 List,与原数组共享数据。
new ArrayList<>(Arrays.asList(array)) 创建一个可变大小的 List,与原数组无关。
Collections.addAll(list, array) 添加数组到现有的 List
List 转数组 list.toArray(new String[0]) 推荐方式,易用高效。
list.stream().toArray() 使用 Java 8 流操作,简洁且现代化。

发表评论

后才能评论