项目开发中经常遇到数组与集合直接的相互转换。
1.数组转集合
需要注意的是,数组转换只能转换为List集合。那么为什么不能转换为Set集合呢?因为Set不能存放重复元素,所以若转换为Set集合可能出现丢失元素的情况。
使用Arrays.asList(arr)实现数组转集合,但是Arrays.asList得到的List是只读的。
实例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayConvertCollectionDemo {
public static void main(String[] args) {
String[] citys = {"北京","上海","广州","深圳"};
List<String> list = Arrays.asList(citys);
List<String> newList = new ArrayList<String>(Arrays.asList(citys));
list.forEach(System.out::println);
System.out.println("---------------newList不是只读的-------------------");
newList.add("西安");
newList.forEach(System.out::println);
System.out.println("---------------Arrays.asList转换后的集合只读-------------------");
list.add("西安");
list.forEach(System.out::println);
}
}
运行结果:
北京
上海
广州
深圳
---------------newList不是只读的-------------------
北京
上海
广州
深圳
西安
---------------Arrays.asList转换后的集合只读-------------------
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at com.oracle.collectionsdemo.ArrayConvertCollectionDemo.main(ArrayConvertCollectionDemo.java:19)
2.集合转数组
使用List的toArray(T[] a)方法,我们可以传入一个指定类型的数组,该数组元素类型与集合元素类型一致。返回值是转化后的数组,该数组会保留集合中的所有元素。
import java.util.ArrayList;
import java.util.List;
public class CollectionConvertArrayDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("广州");
list.add("深圳");
String[] citys = list.toArray(new String[]{});
for(String c: citys){
System.out.println(c);
}
}
}
运行结果:
北京
上海
广州
深圳
小结:
1).数组只能转换为List,使用Arrays.asList得到的集合是只读的。
2).集合可以转换为数组,使用List的toArray(T[] a)