Java 複習 —— 集合與數組的轉換

前言:

    不少時候,你會以爲數組使用方便,有些時候你會以爲集合使用更加方便,大家對於集合和數組的轉換那就在所不免了,下面總結一下數組與集合的轉換。java

一、把數組轉爲集合 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並且不做任何操做。dom

ArrayList override這些method來對list進行操做,可是Arrays$ArrayList沒有override remove(),add()等,ide

因此 throw UnsupportedOperationException。
單元測試

2)官方文檔測試

public static <T> List<T> asList(T... a)url

返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會「直接寫」到數組。)此方法同 Collection.toArray() 一塊兒,充當了基於數組的 API 與基於 collection 的 API 之間的橋樑。返回的列表是可序列化的,而且實現了 RandomAccessspa

此方法還提供了一個建立固定長度的列表的便捷方法,該列表被初始化爲包含多個元素:繼承

 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");ci


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

二、把集合轉爲數組 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);

和上面道理一致。

相關文章
相關標籤/搜索