集合与数组,集合与集合之间的转换
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
}
浙公网安备 33010602011771号