Java - 数组和集合的相互转化
一、数组转集合
注意:数组只能转化为List集合,因为Set不能存放重复元素,若转化为Set,可能出现元素丢失的情况
- 方法一:遍历数组,将数组元素添加到List集合中
1 Integer[] array = {1,2,3,4,5}; 2 List<Integer> list =new ArrayList<>(); 3 for (int i=0;i<array.length;i++){ 4 list.add(i,array[i]); 5 }
也可以使用foreach循环
1 Integer[] array = {1,2,3,4,5}; 2 List<Integer> list =new ArrayList<>(); 3 for (Integer element:array) { 4 list.add(element); 5 }
- 方法二:使用数组工具类的asList()方法
Integer[] array = {1,2,3,4,5}; List<Integer> list =Arrays.asList(array);
注意:
- 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
- 此种方法转化而来的List集合不支持add和remove方法,会报错,
- 原因是:这个新集合是由数组转换过来的,那么该集合就表示原来的数组,所以对集合的操作就是对数组的操作。那么添加元素会导致原数组扩容,那么就不能表示原来的数组了。所以不允许向该集合添加新元素了
- 若对List集合做更新操作,原数组元素也会随之改变,即该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
- 解决办法:
- ①:创建一个空集合,将数组转化后的集合用addall()方法全部添加到这个空集合中
Integer[] array = {1,2,3,4,5}; List<Integer> list =Arrays.asList(array); List<Integer> list_new = new ArrayList<>(); list_new.addAll(list); list_new.set(0,500); System.out.println(list_new.get (0)); System.out.println(array[0]);
- ②:推荐写法
Integer[] array = {1,2,3,4,5}; List<Integer> list =Arrays.asList(array); List<Integer> list_new = new ArrayList<>(list);
- ①:创建一个空集合,将数组转化后的集合用addall()方法全部添加到这个空集合中
- 方法三:使用Collections.addall()方法
Integer[] array = {1,2,3,4,5}; List<Integer> list_new =new ArrayList<>(); Collections.addAll(list_new,array);
- 方法四:使用java9的新方法List.of()
# 此方法为 Java9新增方法,定义在List接口内,并且为静态方法,故可以由类名直接调用 List<String> resultList = List.of(array);
二、集合转数组
- 方法一:遍历
- 方法二:使用集合的toArray()方法
List<Integer> list =new ArrayList<>(); list.add(3); list.add(4); list.add(5); list.add(2); Integer[] array = new Integer[list.size()]; list.toArray(array); System.out.println(Arrays.toString(array));