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


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

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

1007017-20180619093629759-1627382618.png

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构造方法:
1007017-20180619093630279-1149590927.png
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,具体实现类对该方法多少进行了重写:
1007017-20180619093630606-1279432205.png
 
这里返回的布尔值是指,如果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
}

3、参考链接



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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值