Java 复习 —— 集合与数组的转换

前言:

    很多时候,你会觉得数组使用方便,有些时候你会觉得集合使用更加方便,你们对于集合和数组的转换那就在所难免了,下面总结一下数组与集合的转换。

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);

Java 复习 —— 集合与数组的转换

从他的源码中可以知道,对于传入参数的长度不同对返回值也是有影响的;所以最好这样写:

a = list.toArray(T[] a);

2)Set集合转为数组,采用set.toArray(T[] a);

和上面道理一致。


你可能感兴趣的:(Arrays.asList,list.toArray)