Пара Java против хэш-карты

#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 по-прежнему предоставляет методы, которые поощряют делать что-то, что нарушит код. A Pair или любой другой класс кортежей имеет именно тот API , который ему необходим для поддержки того, что он делает. Такие классы, как правило, также неизменяемы. Кроме того, вы должны быть осторожны с интерфейсами, которые допускают применение реализациями произвольных ограничений; это может нарушить или не нарушить принцип подстановки Лискова и/или принцип наименьшего удивления . Платформа сбора данных Java уже имеет множество «необязательных» методов.