array、list和set相互轉化的方法


這里總結一下Array、List和Set相互轉化的方法。

Array轉化為List

將Array轉化為List是使用Arrays.asList()方法。

String[] arr= new String[]{"yanggb1", "yanggb2", "yanggb3"};
List list = Arrays.asList(arr);

list.add("yanggb4"); // not ok
list.remove("yanggb2"); // not ok

要注意的是,Arrays.asList()方法的返回對象是一個Arrays內部類,並沒有實現集合的修改方法。因此轉化后的List並不能添加新元素或刪除元素,會報錯。

實際上,Arrays.asList()方法體現的是適配器模式,只是轉換接口,而后台的數據仍是數組。這就意味着,如果對轉換后的list中的元素進行修改,修改的結果會反映到原來的數組中,因為操作的實際上是原來的數組。

Array轉Set

將Array轉Set是使用Set集合的構造方法。

String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
Set<String> set = new HashSet<>(Arrays.asList(arr));

set.add(
"yanggb4"); // ok set.remove("yanggb2"); // ok

轉換成Set集合之后可以添加元素或刪除元素,因為是調用構造函數new出來的一個HashSet。

另外要注意的是,對轉換后的Set集合進行的操作並不會影響到原來的Array。

System.out.println(set); // [yanggb3, yanggb1, yanggb4]
System.out.println(arr[2]); // yanggb3

也可以看到,這種方式轉換出來的Set相對原來的的數據來說是倒序的。

List轉Set

將List轉Set同樣是使用Set集合的構造方法。

String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List<String> list = Arrays.asList(arr);
Set<String> set = new HashSet(list);

Set轉List

將Set轉List也可以使用List的構造方法。

String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
Set<String> set = new HashSet<>(Arrays.asList(arr));
List<String> list = new ArrayList<>(set);

List或Set轉Array

List或Set轉Array可以使用Collection.toArray()方法。

String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List<String> list = Arrays.asList(arr);
Set<String> set = new HashSet(list);
String[] arr1 = list.toArray(new String[list.size()]);
String[] arr2 = set.toArray(new String[set.size()]);

這里要注意的是,調用Collection.toArray(T[] t)方法的集合需要有指定其中元素的具體類型,否則會出現類型轉換無效的情況(編譯直接報錯),這時候需要強行轉化才可以。

String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List list = Arrays.asList(arr);
Set set = new HashSet(list);
String[] arr1 = (String[])list.toArray();
String[] arr2 = (String[])set.toArray();

另外要注意的是,使用Collection.toArray()轉換出來的數組是一個新的數組,不會影響到原來的數組。

 

"有些人明明看起來很友善,卻總是獨來獨往。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM