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();
7
1
List<Integer> pod = new ArrayList<Integer>();
2
3
for(int i = 0; i < 5; i++){
4
pod.add(i);
5
}
6
7
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);
13
1
List<Integer> pod=new ArrayList<Integer>();
2
3
for(int i=0;i<5;i++){
4
pod.add(i);
5
}
6
7
//第一種
8
Integer[] t=new Integer[pod.size()];
9
pod.toArray(t);
10
11
//第二種
12
Integer[] t3=new Integer[1];
13
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);
}
}
8
1
public static void main(String[] args) {
2
String[] pod = new String[]{"haha", "xixi", "heihei"};
3
List<String> list = Arrays.asList(pod);
4
5
for (String bean : list) {
6
System.out.println(bean);
7
}
8
}
如果希望轉換為長度可變的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);
}
}
9
1
public static void main(String[] args) {
2
String[] pod = new String[]{"haha", "xixi", "heihei"};
3
List<String> list = Arrays.asList(pod);
4
List<String> newList = new ArrayList<String>(list);
5
6
for (String bean : newList) {
7
System.out.println(bean);
8
}
9
}
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);
}
}
x
1
public static void main(String[] args) {
2
TreeSet<Integer> pod = new TreeSet<Integer>();
3
pod.add(1);
4
pod.add(3);
5
pod.add(2);
6
7
List<Integer> list = new ArrayList<Integer>();
8
list.addAll(pod);
9
10
for (Integer bean : list) {
11
System.out.println(bean);
12
}
13
}