当前位置: 首页 > article >正文

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

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

1. List 转 数组

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

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

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

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)` 方法来指定数组的类型,从而避免转换时的强制类型转换:

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` 类),转换的方法和上述类似:

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);
        }
    }
}

2. 数组 转 List

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

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

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

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()`。

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()` 同样适用:

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);
        }
    }
}

 3. 注意事项

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

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

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

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

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

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

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

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

(c) 对于原始类型数组

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

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 和数组之间的转换!


http://www.kler.cn/a/443848.html

相关文章:

  • 分布式系统架构5:限流设计模式
  • 内网IP段介绍与汇总
  • 在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
  • centos7下docker 容器实现redis主从同步
  • 后端使用Spring Boot框架 + 前端VUE 实现滑动模块验证码
  • 基于层次化设计方法,设计一个16位二进制全加器
  • Envoy 进阶指南(下):深入探究Envoy服务和架构
  • iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境
  • 开发基于 Streamlit 和 OpenAI 大模型的 Chatbot App:支持图片的多模态输入项目代码结构优化分析
  • Redis篇-19--运维篇1-主从复制(主从复制,读写分离,配置实现,实战案例)
  • Latex+VsCode+Win10搭建
  • ANPC三电平拓扑:两种调制方式解析
  • spring mvc优劣势分析
  • Z240006Java+ssm+mysql协同办公OA自动化办公系统的设计与实现(附源码 配置 文档)
  • 解决Windows无法连接到L2TP/IPsec VPN
  • PySide6程序框架设计
  • latex中复制到word里面之后如何转变成word自带的公式
  • 解析Java中的Stream API:函数式编程与性能优化
  • Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC
  • 1688所有商品获取API接口详解
  • QAnything源码学习
  • leetcode74:搜索二维矩阵
  • 从 PDF 到 Word:一个简单的 PythonGUI转换器
  • 请给我详细讲解vue.config.js的配置内容
  • React状态管理常见面试题目(二)
  • Vue前端开发-数据缓存