数组转List

数组转List

1、方式一: List<T> asList(T… a)方法

public static void main(String[] args) {
        String[] strArray = new String[2];
        List<String> list = Arrays.asList(strArray);
        list.add("AA");
        System.out.println(list);
    }
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.yefengyu.learn.Array2List.main(Array2List.java:11)

通过 Arrays.asList(T... a)
方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。

public static void main(String[] args) {
        String[] strArray = new String[]{"1", "2"};
        List<String> list = Arrays.asList(strArray);
        list.set(0, "10");
        System.out.println(list);
    }
[10, 2]

Process finished with exit code 0

2、方式二:使用ArrayList构造器方式

通过ArrayList的构造器,将 Arrays.asList(T... a)
的返回值由 java.util.Arrays.ArrayList
转为 java.util.ArrayList

public static void main(String[] args) {
        String[] strArray = new String[]{"1", "2"};
        List<String> list = new ArrayList<>(Arrays.asList(strArray));
        list.add("AA");
        list.remove(0);
        System.out.println(list);
    }
[2, AA]

Process finished with exit code 0

需要在将数组转换为List后,对List进行增删改查操作,在List的数据量不大的情况下,可以使用。

3、方式三:Collections.addAll()方法

通过 boolean addAll(Collection<? super T> c, T... elements)
方式转换,根据数组的长度创建一个长度相同的List,然后通过 Collections.addAll(Collection<? super T> c, T... elements)
方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。

public static void main(String[] args) {
        String[] strArray = new String[]{"1", "2"};
        ArrayList< String> list = new ArrayList<>(strArray.length);
        Collections.addAll(list, strArray);
        list.add("AA");
        list.remove(0);
        System.out.println(list);
    }
[2, AA]

Process finished with exit code 0

需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。

Collections.addAll源码如下:

public static <T> boolean addAll(Collection<? super T> c, T... elements) {
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }

4、基本数据类型的数组

int[] strArray = new int[]{1, 2};
    List<Integer> list = Arrays.asList(strArray);

上面代码编译会报错!而下面的不会。

Integer[] strArray = new Integer[]{1, 2};
    List<Integer> list = Arrays.asList(strArray);

int[]不能直接转换为List<Integer>,而Integer[]就可以转换为List<Integer>。因为List中的泛型必须是引用类型,int是基本数据类型,不是引用类型,但int的包装类型Integer是class类型,属于引用类型,所以Integer可以作为List形参,List<Integer>在java中是可以存在的,但不存在List<int>类型。

原文 

https://segmentfault.com/a/1190000023289881

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 数组转List

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址