2011-01-05 15 views
3

Мне было интересно узнать о карте из java.util.Интерфейс карты от Java-вопроса

Почему метод values ​​() возвращает коллекцию, когда keySet и entrySet возвращают Set?

В чем преимущества/недостатки набора и коллекции?

+0

Если у Java был тип 'Bag', это было бы более уместно. – skaffman

ответ

6

Набор гарантирует, что данная запись может существовать только в нем один раз. В коллекции нет. Поскольку у Карты нет гарантий уникальности в терминах значений, набор из них на самом деле не является множеством, но должен быть сборкой.

+2

Точно - в то время как коллекция ключей и коллекция записей не могут иметь дубликатов и поэтому могут быть объявлены как Set. –

4

Карта внутренне управляет Набор ключей, потому что ключи уникальны значения не

Возвращает представление набора ключей, содержащихся в этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе и наоборот. Если карта изменена, когда выполняется итерация по множеству (за исключением операции собственного удаления итератора), результаты итерации не определены. Набор поддерживает удаление элементов, которое удаляет соответствующее сопоставление с карты через операции Iterator.remove, Set.remove, removeAll, keepAll и clear. Он не поддерживает операции add или addAll.

Также см

+0

Я бы сказал так: «ключи должны быть уникальными, а значения не обязательно». – duffymo

+1

@duffymo проверить обновление, надеюсь, что это лучше –

+0

Ваш оригинал был в порядке, org.life.java. Я болтаю над словами. Твое было совершенно правильно. – duffymo

2

A Set является Collection, который не содержит повторяющихся элементов. Преимущество возвращения Set, когда это возможно, заключается в том, что он делает гарантию однозначности явной.

Как уже указывалось другими, values() не может вернуть набор, поскольку коллекция значений может содержать дубликаты.

6

Это не проблема преимуществ и недостатков - это то, что важно для ключей, значений и записей map.

Ключи в карте уникальны

Ключи в Map уникальны - то есть, там не будет дублированных ключей в Map. A Collection, который гарантирует, что дубликатов не существует, является Set.

Таким образом, ключи возвращаются как Set методом keySet.

Значения в карте не обязательно являются уникальными

С другой стороны, values из Map не должен быть уникальным.

Например, мы могли бы иметь запись в карте с ключом "fruit" карты к значению "apple", а также другую запись с ключом "computer" отображения к значению "apple":

map { 
    key:"fruit" -> value:"apple" 
    key:"computer" -> value:"apple" 
} 

с повторяющимися значениями в карта разрешена.

Поэтому мы не можем использовать Set, так как это требует, чтобы все записи были уникальными. Хорошим выбором для значений Map является возврат простого старого Collection, так как он не налагает никаких ограничений на то, что значения.

Запись в карте также является уникальной

Записи о Map является уникальной - они представляют собой комбинацию из ключа и значения, представленный Map.Entry объекта. Поскольку эта пара ключ-значение уникальна, она возвращается как Set методом entrySet.

Дальнейшее чтение

2

значения() могут быть дублированы , так что это Collection.

keySet() и entrySet() не могут быть дублированы, поэтому они являются Set.

пс: Set не дублируется Collection.

Смежные вопросы