关于java:数组转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>类型。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理