Java 数组与List转换

int[]List 转换

刷题常见

int[]List

// int[] 转 List
int[] arr = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());

解释:

Arrays.stream(arr)  // IntStream
      .boxed()  // Stream
      .collect(Collectors.toList());  // List

Listint[]

// List 转 int[]
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
int[] arr = list.stream().mapToInt(x -> x).toArray();

解释:

int[] arr = list.stream()  // Stream
                .mapToInt(x -> x)  // IntStream
                .toArray();  // int[]

int[][]List 转换

注意到 List 接口自带两个 toArray() 方法

Java 数组与List转换_第1张图片

  • 第一个返回 Object[] 类型,一般不会使用。
  • 第二个需要一个泛型参数,因此只能转换对象数组。

对第二个 toArray() 来说,int[] 类型就不能之间转换,因为 int 是基本类型,不属于 T。然而对二维数组来说就可以使用,二维数组的类型是 int[][],二维数组其实可以看成是一维数组,其中每个元素又是一维数组,而一维数组是对象,属于 T。下图展示了对应关系。

Java 数组与List转换_第2张图片
因此二维int数组可以通过 toArray() 方法转换。

Listint[][]

// List 转 int[][]
List<int[]> list = new ArrayList<>(Arrays.asList(new int[]{1, 10}, new int[]{2, 20}, new int[]{3, 30}));
int[][] arr = list.toArray(new int[0][]);  // new int[0][]起到模板作用

参考:Java集合使用注意事项总结


力扣例题
406. 根据身高重建队列

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people, (a, b) -> {
            if(a[0] == b[0]) return a[1] - b[1];
            else return -(a[0] - b[0]);
        });

        List<int[]> res = new ArrayList<>();
        for(int[] person : people){
            res.add(person[1], person);
        }

        return res.toArray(new int[0][]);  //List 转 int[][]
    }
}

int[][]List

// int[][] 转 List
int[][] arr = {{1, 10}, {2, 20}, {3, 30}};
List<int[]> list2 = Arrays.stream(arr).collect(Collectors.toList());

对象数组与List转换

Java中除了基本类型就是对象。

String 对象为例

List 转对象数组

// List 转 String[]
List<String> list = new ArrayList<>(Arrays.asList("abc", "123", "xyz"));
String[] s = list.toArray(new String[0]);

对象数组转 List

// String[] 转 List
String[] s = {"abc", "123", "xyz"};
List<String> list = Arrays.stream(a).collect(Collectors.toList());

总结

stream 比较通用,toArray() 对基本类型如 int 不适用,实在忘了就老老实实写循环复制一遍。

你可能感兴趣的:(Java,java,list)