前言:
很多时候,你会觉得数组使用方便,有些时候你会觉得集合使用更加方便,你们对于集合和数组的转换那就在所难免了,下面总结一下数组与集合的转换。
1、把数组转为集合 Arrays.asList()
1)网上解释
在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException 异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。
ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,
所以 throw UnsupportedOperationException。
2)官方文档
public static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
3)单元测试
List<String> temp = Arrays.asList(str.split(","));
对于temp是不能进行remove 和 add 操作的,但是可以执行其他的操作,诸如 contains 等
4)问题解决
List<String> list = new ArrayList<String>();
List<String> temp = Arrays.asList(str.split(","));
list.addAll(temp);
等价于
List<String> list = new ArrayList<String>(Arrays.asList(str.split(",")));
5)数组不能直接转为数组,可以通过转为List方式,然后通过Set的构造方法转为Set
new HashSet(Arrays.asList(a));
2、把集合转为数组 list.toArray(T[] a); set.toArray(T[] a);
1)List集合转为数组,采用list.toArray(T[] a);
从他的源码中可以知道,对于传入参数的长度不同对返回值也是有影响的;所以最好这样写:
a = list.toArray(T[] a);
2)Set集合转为数组,采用set.toArray(T[] a);
和上面道理一致。