集合与数组,集合与集合之间的转换


1、集合与数组之间的转换

集合中如List和Set,都和数组有着高度的相似性,既然如此,实际上集合转数组也是情理之中的事情。

集合与数组,集合与集合之间的转换_第1张图片

1.1 集合转数组 toArray

看几个常用的集合类,如上图继承关系图,可以看到他们都集成了一个抽象类AbstractCollection,这个类中就实现了Collection接口的两个方法:
  • toArray ( )
  • toArray ( T[ ] a )
 
前者的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据类型转换的,如下:
List pod = new ArrayList(); 

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 pod=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
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 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构造方法:
1007017-20180619093630279-1149590927.png
public static void main(String[] args) {
    String[] pod = new String[]{"haha", "xixi", "heihei"};
    List list = 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
    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,具体实现类对该方法多少进行了重写:
1007017-20180619093630606-1279432205.png
 
这里返回的布尔值是指,如果List集合对象由于调用addAll方法而发生更改,则返回true

如下示例,TreeSet转换为List类型:
public static void main(String[] args) {
    TreeSet pod = 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
    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
}

3、参考链接

  • 1.2.2 List.addAll方法——添加所有元素到列表中
  • 数组和集合的转换


转载于:https://www.cnblogs.com/deng-cc/p/8072930.html

你可能感兴趣的:(集合与数组,集合与集合之间的转换)