美文网首页
【基础】- 数组和List 的转换

【基础】- 数组和List 的转换

作者: lconcise | 来源:发表于2021-03-02 22:55 被阅读0次

List 转 数组

1.1 使用List toArray(T[] a)方法

        // List 转 数组
        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("docker");

        String[] strings = list.toArray(new String[list.size()]);

1.2 使用JAVA8 流

        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("docker");

        String[] strings = list.stream().toArray(String[]::new);

1.3 错误的方式

        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("docker");

        String[] strings = (String[]) list.toArray();
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    at top.lconcise.practice.list_demo.ListDemo.main(ListDemo.java:19)

数组 转 List

2.1 Arrays.asList

        String[] arrays = {"java", "python", "docker"};

        List<String> strings = Arrays.asList(arrays);

注意: 将数组转换List后,不能对List增删,只能查改,否则抛出 UnsupportedOperationException异常

         list.add("js");
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at top.lconcise.practice.list_demo.ListDemo02.main(ListDemo02.java:20)

原因
Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。

2.2 JAVA8 流 数组转List

        String[] arrays = {"java", "python", "docker"};

        List<String> list = Arrays.stream(arrays).collect(Collectors.toList());

这里的List是java.util包中的ArrayList

相关文章

网友评论

      本文标题:【基础】- 数组和List 的转换

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