• 慎用Arrays.asList()


    开发中有时候创建的数组但却想使用List的相关方法,为了图个方便,就使用了这种方式,但却可能给自己挖了一个坑。下面具体说说这个问题。
    首先查看一下源码,方法代码如下:

    	/**
    	* Returns a fixed-size list backed by the specified array.
    	*/
        @SafeVarargs
        @SuppressWarnings("varargs")
        public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里的ArrayList可不是平时使用的ArrayList,这里的ArrayList重写的方法如下:

    private static class ArrayList<E> extends AbstractList<E>
            implements RandomAccess, java.io.Serializable
        {
            private final E[] a;
            ArrayList(E[] array) {}
            @Override
            public int size() {}
            @Override
            public Object[] toArray() {}
            @Override
            @SuppressWarnings("unchecked")
            public <T> T[] toArray(T[] a) {}
            @Override
            public E get(int index) {}
            @Override
            public E set(int index, E element) {}
            @Override
            public int indexOf(Object o) {}
            @Override
            public boolean contains(Object o) {}
            @Override
            public Spliterator<E> spliterator() {}
            @Override
            public void forEach(Consumer<? super E> action) {}
            @Override
            public void replaceAll(UnaryOperator<E> operator) {}
            @Override
            public void sort(Comparator<? super E> c) {}
            @Override
            public Iterator<E> iterator() {}
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    AbstractList中的好多方法没有从写,比如说add()方法,

        public boolean add(E e) {
            add(size(), e);
            return true;
        }
        public void add(int index, E element) {
            throw new UnsupportedOperationException();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用add()方法是会报错的,所以要慎用Arrays.asList()方法。

  • 相关阅读:
    「python」关于sympy的使用笔记
    怎么做好测试用例评审
    SonarQube的使用心得
    数据结构与算法——选择排序法
    163-Angular项目和NodeExpress服务器发布(一)
    8.3 数据结构——交换排序
    Pytorch实现MNIST字符识别
    2022年推荐算法效率开发必备工具榜单
    victoriaMetrics库之布隆过滤器
    海洋捕食者算法(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/qq_21299835/article/details/126572228