将数组转换为列表

Job*_*obs 36 arrays java-8

为了将Integer数组转换为整数列表,我尝试了以下方法:

  1. 初始化列表(整数类型),遍历数组并插入列表

  2. 通过使用Java 8 Streams:

    int[] ints = {1, 2, 3};
    List<Integer> list = new ArrayList<Integer>();
    Collections.addAll(list, Arrays.stream(ints).boxed().toArray(Integer[]::new));
    
    Run Code Online (Sandbox Code Playgroud)

在性能方面哪个更好?

JB *_*zet 50

第二个创建一个新的整数数组(第一次传递),然后将这个新数组的所有元素添加到列表中(第二次传递).因此它将比第一个效率低,后者只进行一次传递并且不会创建不必要的整数数组.

使用流的更好方法是

List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

哪个应该与第一个具有大致相同的性能.

请注意,对于这样的小阵列,不会有任何显着差异.您应该尝试编写正确,可读,可维护的代码,而不是关注性能.


Rod*_*sio 47

只需尝试类似的东西

Arrays.asList(array)
Run Code Online (Sandbox Code Playgroud)

  • 特别是如果它不适用于基本类型值的数组:int [] array = new int [] {1,2,3,4}; Arrays.asList(array):: List <int []> (5认同)
  • 但是当我们不需要一个可模拟的集合时,这可能会导致问题 (3认同)

Abd*_*awi 13

如果您不想更改列表:

List<Integer> list = Arrays.asList(array)
Run Code Online (Sandbox Code Playgroud)

但是如果你想修改它,你可以使用它:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(ints));
Run Code Online (Sandbox Code Playgroud)

或者只是使用java8,如下所示:

List<Integer> list = Arrays.stream(ints).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Java9引入了这种方法:

List<Integer> list = List.of(ints);
Run Code Online (Sandbox Code Playgroud)

但是,这将返回您无法添加的不可变列表.

您需要执行以下操作才能使其变为可变:

List<Integer> list = new ArrayList<Integer>(List.of(ints));
Run Code Online (Sandbox Code Playgroud)