1、集合与数组之间的转换
集合中如List和Set,都和数组有着高度的相似性,既然如此,实际上集合转数组也是情理之中的事情。
1.1 集合转数组 toArray
看几个常用的集合类,如上图继承关系图,可以看到他们都集成了一个抽象类AbstractCollection,这个类中就实现了Collection接口的两个方法:
- toArray ( )
- toArray ( T[ ] a )
前者的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据类型转换的,如下:
Listpod = new ArrayList (); for(int i = 0; i < 5; i++){ pod.add(i);}Integer[] t=(Integer[])pod.toArray();
7
1
Listpod = new ArrayList ();
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的长度不够,那么会把所有数据放入到一个新的数组中返回
Listpod=new ArrayList ();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
Listpod=new ArrayList ();
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"}; Listlist = 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
Listlist = 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"}; Listlist = Arrays.asList(pod); List newList = new ArrayList (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
Listlist = Arrays.asList(pod);
4
ListnewList = new ArrayList (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) { TreeSetpod = new TreeSet (); pod.add(1); pod.add(3); pod.add(2); List list = new ArrayList (); list.addAll(pod); for (Integer bean : list) { System.out.println(bean); }}
x
1
public static void main(String[] args) {
2
TreeSetpod = new TreeSet ();
3
pod.add(1);
4
pod.add(3);
5
pod.add(2);
6
7
Listlist = new ArrayList ();
8
list.addAll(pod);
9
10
for (Integer bean : list) {
11
System.out.println(bean);
12
}
13
}