在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Collections.emptyList 無法add?

Collections.emptyList 無法add?

還有諸如emptyMap等都無法添加元素,那這些靜態(tài)方法的作用是什么?

回答
編輯回答
呆萌傻

當(dāng)你只需要一個(gè)不變的空列表的時(shí)候就用得到empytList啊,emptyMap同理。還有一點(diǎn)可以看一下源碼:

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 c.isEmpty(); }

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

    public <T> T[] toArray(T[] a) {
        if (a.length > 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) {
        Objects.requireNonNull(filter);
        return false;
    }
    @Override
    public void replaceAll(UnaryOperator<E> operator) {
        Objects.requireNonNull(operator);
    }
    @Override
    public void sort(Comparator<? super E> c) {
    }

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

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

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

EmptyList里面沒有用來描述列表信息及保存列表元素的成員變量,獲取EmptyList對(duì)象與直接new一個(gè)ArrayListLinkedList相比,可以節(jié)省不必要的空間。

2017年3月31日 10:32
編輯回答
離魂曲

首先, 遇到api問題請(qǐng)先查看api文檔:

clipboard.png
clipboard.png

這些方法我個(gè)人通常是這樣用的:
比如有一個(gè)方法是執(zhí)行一些邏輯返回一個(gè)list, 比如查詢數(shù)據(jù)庫返回查詢結(jié)果. 那么當(dāng)沒有任何東西時(shí), 有兩個(gè)選擇: 返回null, 或者返回emptyList. 如果直接返回null, 那么調(diào)用方就需要判空, 而返回emptyList, 調(diào)用方可以直接操作.

這些方法就是"空對(duì)象設(shè)計(jì)模式"的一種實(shí)現(xiàn). 和java 8引入的 Optional 比較像.

2017年3月7日 07:35