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与数组相互转换的主要内容,如果未能解决你的问题,请参考以下文章