Почему бы не поддерживать операции add / addAll для набора, возвращаемого функцией entrySet ()? - PullRequest
0 голосов
/ 24 октября 2018

Метод entrySet() возвращает Set<Map.Entry<K,V>> в HashMap / HashTable.Почему набор не поддерживает операции add / addAll, мы знаем ввод ключа и значения?

Я заметил реализацию java.util.Hashtable.EntrySet.add(Map.Entry<K, V> o), описанную в Jdk1.8:

private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
    public boolean add(Map.Entry<K,V> o) {
        // MyNote: Call AbstractCollection<E>.add(E e) and 
        // throw UnsupportedOperationException
        return super.add(o);
    }
}

Почему нетреализовать для поддержки операции добавления, как следует:

private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
    /**
    * @return <tt>false</tt> if key has exists
    */
    public boolean add(Map.Entry<K,V> o) {
        V old = Hashtable.this.put(o.getKey(), o.getValue());
        return (null == old);
    }
}

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Одна причина, которую я вижу, состоит в том, что EntrySet не знает, к какой коллекции он принадлежит, поэтому он не знает, какие ключи разрешены.

0 голосов
/ 24 октября 2018

Это в соответствии с javadocs Map.entrySet:

Набор поддерживает удаление элемента, который удаляет соответствующее отображение с карты, с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear,Он не поддерживает операции добавления или добавления всех.

...