#java #hashmap
Вопрос:
Пара Java имеет ключ и значение, но хранит только одну запись.
Записи хэш-карты также состоят из ключей и значений, но хэш-карта может хранить более одной записи.
Когда использовать сопряжение по хэш-карте с одной записью? Какова цель пар Java? Единственное преимущество пар, которое я вижу, заключается в том, что он явно допускает только одну запись на пару.
Комментарии:
1. Вы спрашиваете о javafx.Pair<A, B><A, B> ? так как java util не имеет
Pair<A, B>
? В Java естьSimpleEntry<A, B>
то, что похоже наPair
. Как вы сказалиPair
, представляет собой одну запись, аMap
не несколькоPairs
.2. Важно использовать правильный тип для работы. Он самостоятельно документирует код, делает его более читабельным и заставляет разработчиков правильно использовать код. Это та же причина, по которой вы создали бы
Person
класс с именованными свойствами вместо использованияList
для каждого человека, хранящего каждое свойство в некотором произвольном индексе.
Ответ №1:
Это похоже на вопрос «Зачем иметь объект, когда у вас может быть список из одного объекта»… A HashMap
-это структура данных, которая обычно должна выделять больше памяти, чем используется объектами, которые она хранит. Я действительно не вижу никакой веской причины для создания HashMap
одного объекта. Если у вас будет только один объект, тогда просто возьмите этот объект.. не помещайте его без необходимости в более сложную структуру данных..
Комментарии:
1. Сохранение простоты — хорошее эмпирическое правило. Чтобы провести аналогию с реальным миром, хэш с одной парой значений ключа подобен доставке одного яйца в коробке, рассчитанной на 12 яиц. Какой смысл включать все эти накладные расходы, если вы никогда ими не пользуетесь? Теперь вам придется иметь дело с отходами, дополнительными расходами, балансом и т. Д. без какой-либо дополнительной выгоды.
2. @xtratic спасибо за ответы, хорошие объяснения. Что, если я расширю эту логику и скажу: «Если у вас будет только два объекта, тогда просто два объекта» или хэш-карту с размером, ограниченным 2? Почему java имеет совершенно другой тип пар, а не встроенное ограничение размера для hashmap? Не оспаривая их дизайнерские решения, просто хочу расти как разработчик и понимать.
3. @Index Даже с ограниченным
Map
размером API по-прежнему предоставляет методы, которые поощряют делать что-то, что нарушит код. APair
или любой другой класс кортежей имеет именно тот API , который ему необходим для поддержки того, что он делает. Такие классы, как правило, также неизменяемы. Кроме того, вы должны быть осторожны с интерфейсами, которые допускают применение реализациями произвольных ограничений; это может нарушить или не нарушить принцип подстановки Лискова и/или принцип наименьшего удивления . Платформа сбора данных Java уже имеет множество «необязательных» методов.