Java中怎么将数组转换为集合或者将集合转换为数组???
Talk less,Show me the code!
- 数组转集合:使用
Arrays
类提供的方法快速转换
public class ArrayToList {
public static void main(String[] args) {
String[] arrs = new String[3];
arrs[0] ="111";
arrs[1] ="222";
arrs[2] ="333";
List<String> list = Arrays.asList(arrs);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
- 集合转数组
public class ListToArray {
public static void main(String[] args) {
List<String> arrayList = new ArrayList();
arrayList.add("111");
arrayList.add("222");
arrayList.add("333");
Object[] toArray = arrayList.toArray();
for (int i = 0; i < toArray.length; i++) {
System.out.println(toArray[i]);
}
System.out.println("----分水岭----");
List<String> linkedList = new LinkedList<>();
linkedList.add("111");
linkedList.add("222");
linkedList.add("333");
Object[] toArray2 = linkedList.toArray();
for (Object o : toArray2) {
System.out.println(o);
}
}
}
下面就粗略的分析一下吧!
数组转集合-Arrays.asList
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
一看源码,原来是 new 了个 ArrayList 啊,这敢情好啊,紧接着一波骚操作,感觉人生已经到达了巅峰...
public class ArrayToList {
public static void main(String[] args) {
String[] arrs = new String[3];
arrs[0] ="111";
arrs[1] ="222";
arrs[2] ="333";
List<String> list = Arrays.asList(arrs);
list.remove("333");
list.add("444");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
不料,抛异常了???
Exception in thread "main" java.lang.UnsupportedOperationException
Are you kidding me?
为啥呢?听我给你细细道来!因为此 ArrayList
非彼 ArrayList
。在 Arrays
类内部还定义了一个内部类 ArrayList
,呵,真的是好看的皮囊。为啥不换个名字呢?这个“冒牌货”只实现了 ArrayList 的部分功能,并没有实现类似 remove 和 add 这些方法,但是有 set 方法的实现,所以转换后请谨慎使用,如果对转换后的 ArrayList 不放心,可以给它包装一下,改造后的代码如下:
public class ArrayToList {
public static void main(String[] args) {
String[] arrs = new String[3];
arrs[0] ="111";
arrs[1] ="222";
arrs[2] ="333";
List<String> list = Arrays.asList(arrs);
List<String> arrayList = new ArrayList<>(list);
arrayList.remove("333");
arrayList.add("444");
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
}
}
集合转数组-list.toArray
集合转数组主要的区别就是有两个 toArray 方法,有参和无参的,无参方法返回的是一个 Object[] 类型的数组,有参的方法返回的是泛型,看代码:
public class ListToArray {
public static void main(String[] args) {
List<String> arrayList = new ArrayList();
arrayList.add("111");
arrayList.add("222");
arrayList.add("333");
Object[] toArray = arrayList.toArray();
for (Object o : toArray) {
System.out.println(o);
}
System.out.println("----分水岭----");
String[] arrs = new String[3]; // 可以试一下 new String[2]; 和 new String[4] 的结果
String[] strings = arrayList.toArray(arrs);
for (String arr : arrs) {
System.out.println(arr);
}
}
}
具体要怎么选择使用哪个方法呢?就一句话,看你的需求。如果你需要转换后的数组为具体的类型,比如 String[] 或 Integer[] ,就使用第二种(因为有泛型的支持);倘若不需要泛型的支持,选择第一种即可。
今天,你努力了吗?还是假装自己在努力?
我是bearPotMan,一个经验不足的十八线演(码)员(农)。
Know everything,control everything!
网友评论