似乎来晚了,但这是我的两分钱。我们不能List<int>因为int是基本类型,所以我们只能有List<Integer>。
Java 8(整数数组)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8及更低版本(整数数组)
Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 = Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only
需要ArrayList而不是List吗?
如果我们想要List例如的特定实现,ArrayList那么我们可以使用toCollection:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
为什么list21不能在结构上进行修改?
当我们使用Arrays.asList返回列表的大小是固定的,因为返回的列表不是java.util.ArrayList,而是定义在内部的私有静态类java.util.Arrays。因此,如果我们从返回的列表中添加或删除元素,UnsupportedOperationException则将抛出。因此,list22当我们要修改列表时,应该选择继续。如果我们有Java8,那么我们也可以使用list23。
明确list21地说,可以在可以调用的意义上进行修改,list21.set(index,element)但是此列表可能没有结构上的修改,即无法在列表中添加或删除元素。您也可以检查此问题。
如果我们想要一个不可变的列表,则可以将其包装为:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
还要注意的一点是,该方法Collections.unmodifiableList返回指定列表的不可修改视图。不可修改的视图集合是不可修改的集合,也是支持集合的视图。请注意,对后备集合的更改仍然可能,并且,如果发生更改,则可以通过不可修改的视图看到它们。
我们可以在Java 9和10中拥有一个真正的不变列表。
真正不可变的清单
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10(真正不可变列表)有两种方式:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
还要检查我的答案以获取更多信息。
Arrays.asList(new int[] { 1, 2, 3 }); 绝对没有用Java 1.4.2编译,因为int[]是不是一个Object[]。