Мне было интересно узнать о карте из java.util.Интерфейс карты от Java-вопроса
Почему метод values () возвращает коллекцию, когда keySet и entrySet возвращают Set?
В чем преимущества/недостатки набора и коллекции?
Мне было интересно узнать о карте из java.util.Интерфейс карты от Java-вопроса
Почему метод values () возвращает коллекцию, когда keySet и entrySet возвращают Set?
В чем преимущества/недостатки набора и коллекции?
Набор гарантирует, что данная запись может существовать только в нем один раз. В коллекции нет. Поскольку у Карты нет гарантий уникальности в терминах значений, набор из них на самом деле не является множеством, но должен быть сборкой.
Точно - в то время как коллекция ключей и коллекция записей не могут иметь дубликатов и поэтому могут быть объявлены как Set. –
Карта внутренне управляет Набор ключей, потому что ключи уникальны значения не
Возвращает представление набора ключей, содержащихся в этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе и наоборот. Если карта изменена, когда выполняется итерация по множеству (за исключением операции собственного удаления итератора), результаты итерации не определены. Набор поддерживает удаление элементов, которое удаляет соответствующее сопоставление с карты через операции Iterator.remove, Set.remove, removeAll, keepAll и clear. Он не поддерживает операции add или addAll.
Также см
A Set
является Collection
, который не содержит повторяющихся элементов. Преимущество возвращения Set
, когда это возможно, заключается в том, что он делает гарантию однозначности явной.
Как уже указывалось другими, values()
не может вернуть набор, поскольку коллекция значений может содержать дубликаты.
Это не проблема преимуществ и недостатков - это то, что важно для ключей, значений и записей 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
.
Дальнейшее чтение
значения() могут быть дублированы , так что это Collection
.
keySet() и entrySet() не могут быть дублированы, поэтому они являются Set
.
пс: Set
не дублируется Collection
.
Если у Java был тип 'Bag', это было бы более уместно. – skaffman