← 返回首页
JavaSE基础教程(九十九)
发表时间:2021-04-20 23:51:47
数组集合转换

项目开发中经常遇到数组与集合直接的相互转换。

1.数组转集合

需要注意的是,数组转换只能转换为List集合。那么为什么不能转换为Set集合呢?因为Set不能存放重复元素,所以若转换为Set集合可能出现丢失元素的情况。

使用Arrays.asList(arr)实现数组转集合,但是Arrays.asList得到的List是只读的。

实例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayConvertCollectionDemo {

    public static void main(String[] args) {

        String[] citys = {"北京","上海","广州","深圳"};
        List<String> list = Arrays.asList(citys);
        List<String> newList = new ArrayList<String>(Arrays.asList(citys));
        list.forEach(System.out::println);
        System.out.println("---------------newList不是只读的-------------------");
        newList.add("西安");
        newList.forEach(System.out::println);
        System.out.println("---------------Arrays.asList转换后的集合只读-------------------");
        list.add("西安");
        list.forEach(System.out::println);

    }
}

运行结果:

北京
上海
广州
深圳
---------------newList不是只读的-------------------
北京
上海
广州
深圳
西安
---------------Arrays.asList转换后的集合只读-------------------
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.base/java.util.AbstractList.add(AbstractList.java:153)
    at java.base/java.util.AbstractList.add(AbstractList.java:111)
    at com.oracle.collectionsdemo.ArrayConvertCollectionDemo.main(ArrayConvertCollectionDemo.java:19)

2.集合转数组

使用List的toArray(T[] a)方法,我们可以传入一个指定类型的数组,该数组元素类型与集合元素类型一致。返回值是转化后的数组,该数组会保留集合中的所有元素。

import java.util.ArrayList;
import java.util.List;

public class CollectionConvertArrayDemo {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("北京");
        list.add("上海");
        list.add("广州");
        list.add("深圳");

        String[] citys =  list.toArray(new String[]{});
        for(String c: citys){
            System.out.println(c);
        }
    }
}

运行结果:

北京
上海
广州
深圳

小结:

1).数组只能转换为List,使用Arrays.asList得到的集合是只读的。

2).集合可以转换为数组,使用List的toArray(T[] a)