欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅析java中asList的使用详解

程序员文章站 2022-01-20 06:08:03
aslist概述java中的aslist方法是数组工具类 arrays中的一个静态方法,arrays.aslist()方法的作用是将数组或一些元素转为集合,aslist方法返回值得到的集合并不是我们通...

aslist概述

java中的aslist方法是数组工具类 arrays中的一个静态方法,arrays.aslist()方法的作用是将数组或一些元素转为集合,aslist方法返回值得到的集合并不是我们通常使用的list集合,aslist()方法把数组转换成集合时,不能使用其修改集合相关的方法,如果使用修改集合相关的方法add/remove/clear方法会抛出java.lang.unsupportedoperationexception的异常。

1.使用aslist方法返回的对象调用add/remove/clear方法

public static void main(string[] args) {
        string[] strs={"a","b","c"};

        list<string> aslist= arrays.aslist(strs);
        system.out.println(aslist.size());
        //aslist.add("d");
        //aslist.remove("b");
        aslist.clear();
}

控制台输出结果:

浅析java中asList的使用详解

注:其get和set方法可以正常使用

public static void main(string[] args) {
        string[] strs={"a","b","c"};

        list<string> aslist= arrays.aslist(strs);
        system.out.println(aslist.size());
        //aslist.add("d");
        //aslist.remove("b");
        //slist.clear();

        system.out.println("aslist.set() = " + aslist.set(1,"d"));
        system.out.println("aslist.get(1) = " + aslist.get(1));
    }

控制台输出结果:

浅析java中asList的使用详解

注:查看下arrays.aslist()方法的源码,可以发现aslist里面直接用传入的数组创建并返回了arraylist,而这个arraylist是arrays的内部类,它的size()方法直接取的是构造方法传参时的数组的长度,arraylist虽然实现了list接口,但是并没有重写add和remove方法,但重写了get和set方法。

arrays中的aslist方法源码:

	@safevarargs
    @suppresswarnings("varargs")
    public static <t> list<t> aslist(t... a) {
        return new arraylist<>(a);
    }

aslist方法中返回的arraylist方法的源码:

/**
     * @serial include
     */
    private static class arraylist<e> extends abstractlist<e>
        implements randomaccess, java.io.serializable
    {
        private static final long serialversionuid = -2764017481108945198l;
        private final e[] a;

        arraylist(e[] array) {
            a = objects.requirenonnull(array);
        }

        @override
        public int size() {
            return a.length;
        }

        @override
        public object[] toarray() {
            return a.clone();
        }

        @override
        @suppresswarnings("unchecked")
        public <t> t[] toarray(t[] a) {
            int size = size();
            if (a.length < size)
                return arrays.copyof(this.a, size,
                                     (class<? extends t[]>) a.getclass());
            system.arraycopy(this.a, 0, a, 0, size);
            if (a.length > size)
                a[size] = null;
            return a;
        }

        @override
        public e get(int index) {
            return a[index];
        }

        @override
        public e set(int index, e element) {
            e oldvalue = a[index];
            a[index] = element;
            return oldvalue;
        }

        @override
        public int indexof(object o) {
            e[] a = this.a;
            if (o == null) {
                for (int i = 0; i < a.length; i++)
                    if (a[i] == null)
                        return i;
            } else {
                for (int i = 0; i < a.length; i++)
                    if (o.equals(a[i]))
                        return i;
            }
            return -1;
        }

        @override
        public boolean contains(object o) {
            return indexof(o) != -1;
        }

        @override
        public spliterator<e> spliterator() {
            return spliterators.spliterator(a, spliterator.ordered);
        }

        @override
        public void foreach(consumer<? super e> action) {
            objects.requirenonnull(action);
            for (e e : a) {
                action.accept(e);
            }
        }

        @override
        public void replaceall(unaryoperator<e> operator) {
            objects.requirenonnull(operator);
            e[] a = this.a;
            for (int i = 0; i < a.length; i++) {
                a[i] = operator.apply(a[i]);
            }
        }

        @override
        public void sort(comparator<? super e> c) {
            arrays.sort(a, c);
        }
    }

2.java8新特性的方式将aslist返回对象转换为list对象

public static void main(string[] args) {
        string[] strs={"a","b","c"};

        //java8新特性
        list<string> list = stream.of(strs).collect(collectors.tolist());
        system.out.println(list.add("d"));
        system.out.println(list);
}

控制台输出结果:

浅析java中asList的使用详解

3.将aslist返回的对象转换为list对象

public static void main(string[] args) {
        string[] strs={"a","b","c"};

        list<string> list = new arraylist<>(arrays.aslist(strs));
        system.out.println(list.add("d"));
        system.out.println(list);
}

控制台输出结果:

浅析java中asList的使用详解

到此这篇关于java中aslist的使用的文章就介绍到这了,更多相关java aslist使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!