java list 和数组互相转换的一些方法

在Java中,List 和 数组(Array) 之间的转换是一个常见的操作。由于它们是不同的数据结构,Java提供了一些方法来在它们之间进行转换。我们会从List到数组和数组到List两种情况分别讨论。

  1. List 转 数组

假设你有一个 `List` 类型的对象,想要将其转换为一个数组。你可以使用 List`类的 toArray()方法。

(a) List 转 数组(Object类型)

最常见的转换是将一个 `List` 转换为一个普通的对象数组 `Object[]`,方法如下:

java 复制代码
import java.util.List;
import java.util.ArrayList;

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

        // 将List转换为数组(Object类型)
        Object[] array = list.toArray();

        // 输出结果
        for (Object obj : array) {
            System.out.println(obj);
        }
    }
}

在这个例子中,`list.toArray()` 返回的是一个 `Object[]` 类型的数组。此时数组的元素类型是 `Object`,如果需要更具体的类型,可以强制转换。

(b) List 转 数组(指定类型)

如果你知道 List 中存储的是某个具体类型的元素(比如 `String`),你可以使用 `toArray(T[] a)` 方法来指定数组的类型,从而避免转换时的强制类型转换:

java 复制代码
import java.util.List;
import java.util.ArrayList;

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

        // 将List转换为数组(指定类型)
        String[] array = list.toArray(new String[0]);

        // 输出结果
        for (String str : array) {
            System.out.println(str);
        }
    }
}

在这个例子中,list.toArray(new String[0]) 生成了一个类型为 String[]的数组。new String[0]表示传入的数组大小,实际上该数组的大小会根据 List 的元素数自动调整。

(c) 对于更复杂的 List 类型

如果你的 List 中包含自定义类型(比如一个 `Person` 类),转换的方法和上述类似:

java 复制代码
import java.util.List;
import java.util.ArrayList;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ", " + age;
    }
}

public class ListToArrayExample {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("Alice", 30));
        list.add(new Person("Bob", 25));

        // 将List转换为Person类型的数组
        Person[] array = list.toArray(new Person[0]);

        // 输出结果
        for (Person person : array) {
            System.out.println(person);
        }
    }
}
  1. 数组 转 List

如果你有一个数组,想要将其转换为一个 `List`,你可以通过 `Arrays.asList()` 方法来实现。

(a) 数组 转 List(基本数据类型)

对于一个简单的数组(如 `int[]` 或 `String[]`),你可以这样做:

java 复制代码
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);

        // 输出结果
        for (String str : list) {
            System.out.println(str);
        }
    }
}

(b) 数组 转 List(原始类型数组)

注意,`Arrays.asList()` 方法对于原始类型数组(如 `int[]`, `double[]` 等)并不会返回一个 `List<Integer>` 或 `List<Double>` 等类型的 `List`,而是会返回一个 `List<int[]>` 类型的 List。要避免这个问题,你需要将原始类型数组包装成相应的包装类数组,然后再使用 `Arrays.asList()`。

java 复制代码
import java.util.Arrays;
import java.util.List;

public class ArrayToListExample {
    public static void main(String[] args) {
        // 创建一个int数组
        int[] array = {1, 2, 3};

        // 将int数组包装为Integer数组
        Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new);

        // 将Integer数组转换为List
        List<Integer> list = Arrays.asList(boxedArray);

        // 输出结果
        for (Integer num : list) {
            System.out.println(num);
        }
    }
}

(c) 数组 转 List(自定义对象数组)

如果你有一个自定义类型的数组,使用 `Arrays.asList()` 同样适用:

java 复制代码
import java.util.Arrays;
import java.util.List;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ", " + age;
    }
}

public class ArrayToListExample {
    public static void main(String[] args) {
        // 创建一个Person类型的数组
        Person[] array = {new Person("Alice", 30), new Person("Bob", 25)};

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

        // 输出结果
        for (Person person : list) {
            System.out.println(person);
        }
    }
}
  1. 注意事项

(a) `Arrays.asList()` 的限制

  • 使用 `Arrays.asList()` 创建的 List 是一个 **固定大小 的 List,这意味着你不能向 List 中添加或删除元素。如果试图进行这样的操作,会抛出 `UnsupportedOperationException`。

例如:

java 复制代码
 List<String> list = Arrays.asList("A", "B", "C");
 list.add("D");  // 运行时抛出 UnsupportedOperationException

如果你需要一个可修改的 List,应该将其包装在一个新的 `ArrayList` 中:

java 复制代码
 List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
 list.add("D");  // 现在可以修改

(b) 通过 `toArray()` 方法进行类型转换

如果 List 的类型不是你想要的类型(例如 List 存储了类型为 `Object` 的元素),可以在进行转换时强制类型转换。例如:

java 复制代码
Object[] objArray = list.toArray();
String[] strArray = (String[]) objArray;  // 强制转换为 String[]

(c) 对于原始类型数组

Java 没有直接将原始类型数组(如 `int[]`, `double[]`)转换为 List 的方法。你可以先将原始类型数组转换为包装类数组,然后再用 `Arrays.asList()` 方法转换成 List。例如:

java 复制代码
int[] array = {1, 2, 3};
Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new);
List<Integer> list = Arrays.asList(boxedArray);

总结

  • List 转 数组:使用 `toArray()` 方法。对于类型化的 List,推荐使用 `toArray(T[] a)` 方法,这样可以避免不必要的类型转换。

  • 数组 转 List:使用 `Arrays.asList()` 方法,但要注意原始类型数组的特殊情况(它们会被转换为一个包含数组的 List),并且返回的 List 是固定大小的,不能进行添加或删除元素的操作。

希望这个详细的解答能帮助你在 Java 中灵活地进行 List 和数组之间的转换!

相关推荐
hurrycry_小亦12 分钟前
(Windows系统)详细介绍Windows系统 含有英文版
windows
V+zmm1013418 分钟前
“返家乡”高校暑期社会实践微信小程序设计与开发ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·ssm
精神阿祝33 分钟前
使用Spring Boot、VUE实现SSE长连接:跟踪文件上传和任务进度
java·spring boot·后端·vue
CN.LG34 分钟前
浅谈Java注解之CachePut
java·开发语言·spring
_loehuang_35 分钟前
Spring MVC 请求头中 ContentType和DataType区别
java·spring·mvc
游侠小马哥36 分钟前
SpringBoot feign基于HttpStatus重试
java·spring boot
深情废杨杨36 分钟前
后端-添加购物车和查看购物车
java·spring boot·mysql
棐木40 分钟前
快速上手Spring注解、SpringAop
java·后端·spring
网硕互联的小客服43 分钟前
如何排查服务器是否有被黑客入侵的迹象?
linux·运维·服务器·windows
weisian1511 小时前
Redis篇-19--运维篇1-主从复制(主从复制,读写分离,配置实现,实战案例)
java·运维·redis