Arrays.asList Vs List.of
时间: 2023-10-17 14:25:25 浏览: 152
Arrays.asList和List.of都是用来创建不可变的List的方法,但它们有一些区别。
Arrays.asList方法接受一个数组或可变参数,并返回一个包装了该数组或参数的List。这意味着它返回的List是可变的,但底层数组是不可变的。这就意味着你不能调用修改List大小的方法,比如add、remove等。如果你尝试修改List的大小,会抛出UnsupportedOperationException异常。另外,通过asList方法创建的List是可以修改元素的。
List.of方法是Java 9中引入的新方法,它接受可变参数并返回一个不可变的List。这意味着你不能修改List的大小或者修改元素。如果尝试这样做,会抛出UnsupportedOperationException异常。
除了上述区别外,还有一个重要的区别是对于基本类型数组的处理。Arrays.asList方法可以接受基本类型数组作为参数,并返回一个包装了该基本类型数组的List。而List.of方法只能接受对象类型的参数,不能直接接受基本类型数组。你需要先将基本类型数组转换为对象类型数组,然后才能使用List.of方法。
总之,如果你需要一个不可修改的List,并且不需要对其进行大小或元素的修改,那么推荐使用List.of方法。如果需要一个可修改大小和元素的List,并且不需要对基本类型数组进行处理,那么可以使用Arrays.asList方法。
相关问题
List<String> list = Arrays.asList(arr);Arrays报错 List<String> list = Arrays.asList(arr); List<String> list = Arrays.asList(arr);
Arrays.asList()方法返回的是一个固定大小的List,不能进行添加或删除操作,只能进行修改操作。如果你想要一个可变的List,可以使用java.util.ArrayList来代替Arrays.asList()方法返回的List。如果你使用Arrays.asList()方法将int[]转成ArrayList,会出现类型不匹配的错误,因为Arrays.asList()方法只能将数组转换为List<Object>类型,而int[]是一个基本数据类型,不是一个对象。如果你想要将int[]转换为List<Integer>类型的ArrayList,可以使用Java 8中的IntStream来实现,例如:
```java
int[] arr = {1, 2, 3};
List<Integer> list = IntStream.of(arr).boxed().collect(Collectors.toList());
```
List<Object> list = Arrays.asList(array);转为List<String> list = Arrays.asList(array);
要将`List<Object> list`转换为`List<String> list`,可以使用以下代码:
```
List<Object> list = Arrays.asList(array);
List<String> stringList = list.stream()
.map(String::valueOf)
.collect(Collectors.toList());
```
这里,我们首先将`List<Object>`转换为流,并使用`map`方法将流中的每个元素转换为字符串类型。然后,使用`collect`方法将转换后的元素收集到新的`List<String>`中。最后,你可以使用`stringList`进行进一步的操作。
阅读全文