集合與數組,集合與集合之間的轉換



1、集合與數組之間的轉換

集合中如List和Set,都和數組有着高度的相似性,既然如此,實際上集合轉數組也是情理之中的事情。

1.1 集合轉數組 toArray

看幾個常用的集合類,如上圖繼承關系圖,可以看到他們都集成了一個抽象類AbstractCollection,這個類中就實現了Collection接口的兩個方法:
  • toArray ( )
  • toArray ( T[ ] a )
 
前者的返回值是一個Object的數組,Object[],這個數組是不可以進行強制數據類型轉換的,如下:
List<Integer> pod = new ArrayList<Integer>(); 

for(int i = 0; i < 5; i++){
  pod.add(i);
}

Integer[] t=(Integer[])pod.toArray();

結果就是報錯: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

所以像如上情況,就應該使用第二種方法:
  • toArray(T[ ] a) 
  • 如果數組a的長度足夠放入整個集合的數據,那么所有數據會放入到數組a當中
  • 如果數組a的長度不夠,那么會把所有數據放入到一個新的數組中返回

List<Integer> pod=new ArrayList<Integer>();

for(int i=0;i<5;i++){
    pod.add(i);
}

//第一種
Integer[] t=new Integer[pod.size()];
pod.toArray(t);

//第二種
Integer[] t3=new Integer[1];
Integer[] t2=pod.toArray(t3);

即以上的 t 和 t2 都是我們期望得到的數組。

1.2 數組轉集合 asList

數組轉集合,就要利用到數組的工具類Arrays了,該類中定義了數組轉為List的一個方法:
  • asList(T... a)
  • 返回一個裝載了數組a中所有數據的固定長度的List

public static void main(String[] args) {
    String[] pod = new String[]{"haha", "xixi", "heihei"};
    List<String> list = Arrays.asList(pod);

    for (String bean : list) {
        System.out.println(bean);
    }
}

如果希望轉換為長度可變的List,則利用ArrayList構造方法:
public static void main(String[] args) {
    String[] pod = new String[]{"haha", "xixi", "heihei"};
    List<String> list = Arrays.asList(pod);
    List<String> newList = new ArrayList<String>(list);

    for (String bean : newList) {
        System.out.println(bean);
    }
}


2、集合與集合之間的轉換 addAll

剛才我們提到了集合類的繼承關系圖,在抽象類AbstractCollection,還實現了Collection接口中的一個方法,叫addAll,具體實現類對該方法多少進行了重寫:
 
這里返回的布爾值是指,如果List集合對象由於調用addAll方法而發生更改,則返回true

如下示例,TreeSet轉換為List類型:
public static void main(String[] args) {
    TreeSet<Integer> pod = new TreeSet<Integer>();
    pod.add(1);
    pod.add(3);
    pod.add(2);
    
    List<Integer> list = new ArrayList<Integer>();
    list.addAll(pod);

    for (Integer bean : list) {
        System.out.println(bean);
    }
}

3、參考鏈接




免責聲明!

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



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