zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java中List、Set和数组之间转换方法总结

JAVAListset数组 总结 之间 转换方法
2023-09-27 14:29:07 时间

List转数组:

方法一:(笨办法硬换)

//array为待转换int[]
int[] res = new int[list.size()];
int i = 0;
for(int num : list){
	res[i] = num;
	i++;
}

方法二:(toArray)

//int类型,其他基本数据类型同理(必须是包装类对象)
//底层源码逻辑:
//1.当传入的对象数组长度小于等于实际长度时,按实际长度copy一份
//2.当传入的对象数组长度大于实际长度时,返回数组后面超过实际数据长度的位置会补null
//因此,这里主要是为了传入类型,通常写实际数组长度或者写0都可以

//重点!!!只有元素类型为引用数据类型的才能这样转,List<Integer>不能转成int[],但List<int[]>可以转成int[][],int[]数组类型也属于引用类型
Integer[] res = list.toArray(new Integer[0]);

//String类型
String[] res = list.toArray(new String[0]);

//int[]类型(转二维数组)
List<int[]> list = new ArrayList<>();
//第一个[]是list中int[]的数量,第二个[]是每个int[]的长度
int[][] res = list.toArray(new int[list.size()][]);	

//不加参数就只能转换为Object类型数组
Object[] res = list.toArray();

数组转List:

方法一:(笨办法硬换)

//array为待转换int[]
List<Integer> list = new ArrayList<>();
for(int num : array){
	list.add(num);
}

方法二:(Arrays.asList)

/*
!!!注意:asList的参数必须是对象数组,不能是基本类型数组。例如传入int类型数组,会把整个数组作一个元素,则前面必须用List<int[]>这种形式接收
*/

//这样直接转换后的list不能调用add和remove等方法
//这里创建的list是java.util.Arrays.ArrayList,并不是java.util.ArrayList
List<Integer> list = Arrays.asList(array);

//正确转换方式!
List<Integer> list = new ArrayList<>(Arrays.asList(array));

方法三:(List.of)

//这样直接转换后的list不能调用add和remove等方法,jdk9以上才有
List<Integer> list = List.of(array);

Set转数组:(和List一毛一样)


数组转Set:

方法一:(笨办法硬换)

//array为待转换int[],注意set会去重
Set<Integer> set= new HashSet<>();
for(int num : array){
	set.add(num);
}

方法二:(Arrays.asList,同数组转List)


List转Set:

//list为待转换list
Set<Integer> set= new HashSet<>(list);

Set转List:

//set为待转换set
List<Inteter> list = new ArrayList<>(set);