java中list与数组相互转换

Posted luffy5459

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中list与数组相互转换相关的知识,希望对你有一定的参考价值。

  java中,list转数组,很方便,list本身自带一个方法toArray(),但是这个方法默认返回的数组类型是Object,我们可以给toArray()方法传递一个类型参数,指定最终数组类型。

package org.example;
import java.util.*;
public class List2Array 
    public static void main(String[] args) 
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String[] strs = list.toArray(new String[0]);
        System.out.println(String.join(",", strs));
    

    这个参数,是一个实例化的数组,一般指定数组长度为list元素个数,但是我们可以默认设置0。这种办法是最简单的,还有一个办法就是遍历集合,然后向数组中添加元素。

    再来说说将数组转为list集合,一般而言,Arrays.asList()就可以将一个数组转为List,但是这种办法得到的数组,是无法使用add,size等一系列方法的,虽然编译不会报错,但是运行的时候报错,所以最保险的做法就是,声明一个ArrayList实例,然后调用Collections.addAll(list,array)来将数组元素加入list集合中。还有一种办法就是,将Arrays.asList()生成的集合对象,再次以参数的形式赋值给ArrayList。

package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Array2List 
    public static void main(String[] args) 
        String[] strs = new String[]"hello","world","java";
        // 1
        List<String> list = new ArrayList<>();
        Collections.addAll(list,strs);
        System.out.println(list);
        // 2
        List<String> strs2 = Arrays.asList(strs);
        strs2.add("test"); // 编译不报错,运行报错。
        System.out.println(strs2);
        List<String> list2 = new ArrayList<>(strs2);
        System.out.println(list2);
    

    运行结果:

     另外,如果数组是int基础类型的数组int[],我们在转list集合的时候,可以考虑使用IntStream流box()方法来先将它转为Stream<Integer>,再使用Stream方法直接转为List集合。

package org.example;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class IntArray2List 
    public static void main(String[] args) 
        int[] nums = new int[]1,3,4;
        List<Integer> list = IntStream.of(nums).boxed().collect(Collectors.toList());
        list.add(5);
        System.out.println(list);
    

    运行结果:

    box()的作用就是将IntStream转为Stream<Integer>。 集合类型需要的是包装类型,所以int[]数组需要经历一次Integer[]的转化,直观的做法是遍历,但是这里巧妙的借助IntStream来直接转为Stream<Integer>的流对象。

以上是关于java中list与数组相互转换的主要内容,如果未能解决你的问题,请参考以下文章

JAVA数组与List相互转换

在Java中,ArrayList与数组如何相互转换,写出例子

Java中ArrayList与数组间相互转换

java List和数组相互转换方法有坑

java List和数组相互转换方法有坑

ArrayList和数组间的相互转换