美文网首页
Java中数组和集合之间的转换

Java中数组和集合之间的转换

作者: bearPotMan | 来源:发表于2019-03-18 21:07 被阅读0次

    Java中怎么将数组转换为集合或者将集合转换为数组???

    Talk less,Show me the code!

    • 数组转集合:使用 Arrays 类提供的方法快速转换
    public class ArrayToList {
        public static void main(String[] args) {
            String[] arrs = new String[3];
            arrs[0] ="111";
            arrs[1] ="222";
            arrs[2] ="333";
            
            List<String> list = Arrays.asList(arrs);
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }
    
    • 集合转数组
    public class ListToArray {
        public static void main(String[] args) {
            List<String> arrayList = new ArrayList();
            arrayList.add("111");
            arrayList.add("222");
            arrayList.add("333");
    
            Object[] toArray = arrayList.toArray();
            for (int i = 0; i < toArray.length; i++) {
                System.out.println(toArray[i]);
            }
    
            System.out.println("----分水岭----");
    
            List<String> linkedList = new LinkedList<>();
            linkedList.add("111");
            linkedList.add("222");
            linkedList.add("333");
    
            Object[] toArray2 = linkedList.toArray();
            for (Object o : toArray2) {
                System.out.println(o);
            }
        }
    }
    

    下面就粗略的分析一下吧!

    数组转集合-Arrays.asList

    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
    

    一看源码,原来是 new 了个 ArrayList 啊,这敢情好啊,紧接着一波骚操作,感觉人生已经到达了巅峰...

    public class ArrayToList {
        public static void main(String[] args) {
            String[] arrs = new String[3];
            arrs[0] ="111";
            arrs[1] ="222";
            arrs[2] ="333";
    
            List<String> list = Arrays.asList(arrs);
            list.remove("333");
            list.add("444");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }
    

    不料,抛异常了???

    Exception in thread "main" java.lang.UnsupportedOperationException

    Are you kidding me?
    为啥呢?听我给你细细道来!因为此 ArrayList 非彼 ArrayList。在 Arrays 类内部还定义了一个内部类 ArrayList,呵,真的是好看的皮囊。为啥不换个名字呢?这个“冒牌货”只实现了 ArrayList 的部分功能,并没有实现类似 remove 和 add 这些方法,但是有 set 方法的实现,所以转换后请谨慎使用,如果对转换后的 ArrayList 不放心,可以给它包装一下,改造后的代码如下:

    public class ArrayToList {
        public static void main(String[] args) {
            String[] arrs = new String[3];
            arrs[0] ="111";
            arrs[1] ="222";
            arrs[2] ="333";
    
            List<String> list = Arrays.asList(arrs);
            List<String> arrayList = new ArrayList<>(list);
            arrayList.remove("333");
            arrayList.add("444");
            for (int i = 0; i < arrayList.size(); i++) {
                System.out.println(arrayList.get(i));
            }
        }
    }
    

    集合转数组-list.toArray

    集合转数组主要的区别就是有两个 toArray 方法,有参和无参的,无参方法返回的是一个 Object[] 类型的数组,有参的方法返回的是泛型,看代码:

    public class ListToArray {
        public static void main(String[] args) {
            List<String> arrayList = new ArrayList();
            arrayList.add("111");
            arrayList.add("222");
            arrayList.add("333");
    
            Object[] toArray = arrayList.toArray();
            for (Object o : toArray) {
                System.out.println(o);
            }
    
            System.out.println("----分水岭----");
    
            String[] arrs = new String[3]; // 可以试一下 new String[2]; 和 new String[4] 的结果
            String[] strings = arrayList.toArray(arrs);
            for (String arr : arrs) {
                System.out.println(arr);
            }
        }
    }
    

    具体要怎么选择使用哪个方法呢?就一句话,看你的需求。如果你需要转换后的数组为具体的类型,比如 String[] 或 Integer[] ,就使用第二种(因为有泛型的支持);倘若不需要泛型的支持,选择第一种即可。
    今天,你努力了吗?还是假装自己在努力?

    我是bearPotMan,一个经验不足的十八线演(码)员(农)。
    Know everything,control everything!

    相关文章

      网友评论

          本文标题:Java中数组和集合之间的转换

          本文链接:https://www.haomeiwen.com/subject/eqdbmqtx.html