Java中List和Array转换

List -> Array

1. 调用toArray()方法直接返回一个Object[]数组:

import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<String> list = List.of("apple", "pear", "banana");
        Object[] array = list.toArray();
        for (Object s : array) {
            System.out.println(s);
        }
    }
}

这种方法会丢失类型信息,所以实际应用很少。

2. 给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中:

import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(12, 34, 56);
        Integer[] array = list.toArray(new Integer[3]);
        for (Integer n : array) {
            System.out.println(n);
        }
    }
}

注意到这个toArray(T[])方法的泛型参数并不是List接口定义的泛型参数,所以,我们实际上可以传入其他类型的数组,例如我们传入Number类型的数组,返回的仍然是Number类型:

import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(12, 34, 56);
        Number[] array = list.toArray(new Number[3]);
        for (Number n : array) {
            System.out.println(n);
        }
    }
}

但是,如果我们传入类型不匹配的数组,例如,String[]类型的数组,由于List的元素是Integer,所以无法放入String数组,这个方法会抛出ArrayStoreException。

如果我们传入的数组大小和List实际的元素个数不一致怎么办?根据List接口的文档,我们可以知道:

如果传入的数组不够大,那么List内部会创建一个新的刚好够大的数组,填充后返回;如果传入的数组比List元素还要多,那么填充完元素后,剩下的数组元素一律填充null。

实际上,最常用的是传入一个“恰好”大小的数组:

Integer[] array = list.toArray(new Integer[list.size()]);

3. 通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法:

Integer[] array = list.toArray(Integer[]::new);

这种函数式写法我们会在后续讲到。

Array-> List

通过List.of(T…)方法最简单:

Integer[] array = { 1, 2, 3 };
List<Integer> list = List.of(array);

对于JDK 11之前的版本,可以使用Arrays.asList(T…)方法把数组转换成List。

要注意的是,返回的List不一定就是ArrayList或者LinkedList,因为List只是一个接口,如果我们调用List.of(),它返回的是一个只读List:

import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(12, 34, 56);
        list.add(999); // UnsupportedOperationException
    }
}

对只读List调用add()、remove()方法会抛出UnsupportedOperationException。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java ,可以使用 `toArray()` 方法将 `List` 转换为数组。 例如,如果你有一个 `List<String>` 变量 `list`,你可以使用以下代码将它转换为 `String` 数组: ``` String[] array = list.toArray(new String[0]); ``` 如果你想将 `List` 转换为不同类型的数组,可以指定不同的数组类型。例如,如果你想将 `List<Integer>` 转换为 `int` 数组,你可以使用以下代码: ``` int[] array = list.stream().mapToInt(i -> i).toArray(); ``` 注意,这种方法只能用于将 `List` 转换为基本类型数组,如 `int`、`double`、`float` 等。对于对象类型的数组,你需要使用 `toArray(T[] a)` 方法。 另外,也可以使用 `List.toArray(T[] a)` 方法将 `List` 转换为数组,其 `T` 指定数组元素的类型。例如,如果你想将 `List<String>` 转换为 `String` 数组,你可以使用以下代码: ``` String[] array = list.toArray(new String[list.size()]); ``` 这种方法的优点是可以直接指定转换后的数组的大小,因此不会出现转换后数组大小和 `List` 大小不一致的情况。 ### 回答2: 在Java,我们可以使用ListArray之间的转换来实现数据类型的互相转换。 要将List转换Array,我们可以使用List的toArray()方法。这个方法返回一个包含List所有元素的新数组。可以将这个新数组的类型指定为List存储元素的类型的数组。以下是一个示例代码: List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); String[] array = list.toArray(new String[0]); 在这个示例,我们首先创建一个包含String类型元素的List。然后,我们使用List的toArray()方法将这个List转换为String[]类型的数组。在这个方法,我们传递一个新的String数组作为参数。如果我们传递一个长度为0的数组作为参数,toArray()方法将返回一个新的String数组,其包含List的所有元素。 要将数组转换List,我们可以使用Arrays类的asList()方法。这个方法返回一个包含指定数组所有元素的List。以下是一个示例代码: String[] array = {"Java", "Python", "C++"}; List<String> list = Arrays.asList(array); 在这个示例,我们首先创建一个包含String类型元素的数组。然后,我们使用Arrays类的asList()方法将这个数组转换为一个List。在这个方法,我们传递数组作为参数,并将返回的List赋值给新的List变量。 需要注意的是,使用asList()方法转换List实际上是一个固定大小的List,不能调整其大小。如果我们尝试对这个List进行添加或删除操作,将会抛出UnsupportedOperationException异常。 ### 回答3: 要将JavaList转换为数组,您可以使用List的toArray()方法。这个方法将返回一个与List相对应的数组。 ```java List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Orange"); String[] array = list.toArray(new String[0]); ``` 在这个例子,我们首先创建一个ArrayList的String类型的List对象,并向其添加了三个元素。然后,我们调用List的toArray()方法,并将其传入我们希望返回的数组类型。为了获得一个String类型的数组,我们传入了一个空的String数组,通过这个空数组的类型来确定返回的数组类型。 如果您不使用提供的空数组, toArray()方法将会返回一个Object类型的数组。但是请注意,传递给toArray()方法的空数组大小并不影响结果数组的大小,它仅仅用于确定返回数组的类型。 转换后,我们可以通过循环遍历原始List和新的数组来进行比较。 ```java for (String element : list) { System.out.println(element); } for (String element : array) { System.out.println(element); } ``` 这样,我们就可以将一个JavaList对象转换为相应类型的数组,以便在需要使用数组的代码使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值