使用

时间:2025-04-02 14:20:06
()方法说明:返回一个空的集合。调用者不需要再做非空判断。返回的是一个不可变并且长度为0的静态内部类。可以减少内存开销。但是返回的空集合,不可以执行增删操作。具体源码如下:
public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }

private static class EmptyList<E>
        extends AbstractList<E>
        implements RandomAccess, Serializable {
        private static final long serialVersionUID = 8842843931221139166L;

        public Iterator<E> iterator() {
            return emptyIterator();
        }
        public ListIterator<E> listIterator() {
            return emptyListIterator();
        }

        public int size() {return 0;}
        public boolean isEmpty() {return true;}

        public boolean contains(Object obj) {return false;}
        public boolean containsAll(Collection<?> c) { return (); }

        public Object[] toArray() { return new Object[0]; }

        public <T> T[] toArray(T[] a) {
            if ( > 0)
                a[0] = null;
            return a;
        }

        public E get(int index) {
            throw new IndexOutOfBoundsException("Index: "+index);
        }

        public boolean equals(Object o) {
            return (o instanceof List) && ((List<?>)o).isEmpty();
        }

        public int hashCode() { return 1; }

        @Override
        public boolean removeIf(Predicate<? super E> filter) {
            (filter);
            return false;
        }
        @Override
        public void replaceAll(UnaryOperator<E> operator) {
            (operator);
        }
        @Override
        public void sort(Comparator<? super E> c) {
        }

        // Override default methods in Collection
        @Override
        public void forEach(Consumer<? super E> action) {
            (action);
        }

        @Override
        public Spliterator<E> spliterator() { return (); }

        // Preserves singleton property
        private Object readResolve() {
            return EMPTY_LIST;
        }
    }

我们可以看到EmptyList 继承AbstartList 而在AbstList中并没有具体实现add()以及remove()方法。所以无法进行增删操作。