集合数组转换

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

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

 

1.1 集合转数组 toArray

看几个常用的集合类,如上图继承关系图,可以看到他们都集成了一个抽象类AbstractCollection,这个类中就实现了Collection接口的两个方法:

  • toArray ( )
  • toArray ( T[ ] a )

 

前者的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据类型转换的,如下:

 

 

 

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的长度不够,那么会把所有数据放入到一个新的数组中返回

 

 

 

 

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

 

 

 

 

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构造方法:

 

 

 

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类型:

 

 

 

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

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值