這里總結一下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()轉換出來的數組是一個新的數組,不會影響到原來的數組。
"有些人明明看起來很友善,卻總是獨來獨往。"
