Java - типы данных, используемые в качестве ключей в картах - PullRequest
1 голос
/ 11 сентября 2011

Какие типы данных допустимо использовать в качестве ключей в картах в Java?Можно ли использовать двойной?Как насчет строки?

Ответы [ 6 ]

4 голосов
/ 11 сентября 2011

Проверьте API, так как могут быть ограничения на допустимые типы ключей в зависимости от конкретной карты. Кроме того, вы можете использовать только ссылочные типы, но не примитивные типы. Так что double не сработает, но Double - это хорошо. Наконец, ключ предпочтительно не должен быть изменяемым, так как это может вызвать неправильное поведение.

2 голосов
/ 11 сентября 2011

Вы можете использовать любой тип объекта. Но чтобы получить правильное поведение, тип должен иметь правильно реализованные функции hashCode () и equals ().

Так что, если вы хотите использовать double, вам следует вместо этого использовать Double, и из-за упаковки и распаковки вы можете фактически передавать значения double в функции, такие как add() и т. Д.

1 голос
/ 11 сентября 2011

doubles не будет работать, так как они имеют примитивный тип, то есть вы не можете определить карту Map<double,String>. Однако вы можете определить Map<Double,String>, а затем использовать двойное значение для метода put (благодаря автобоксированию).

Предостережение для абитного объекта на карте заключается в том, что, если методы equal и hashcode не переопределены, равенство основывается на ссылках, что может быть нежелательным поведением. (Таким образом, вы можете получить две записи, где вы ожидаете только одну.)

0 голосов
/ 11 сентября 2011

Примитивные типы данных недопустимы, лучше класс Wrapper для хранения ваших данных на карте.Более того, до тех пор, пока вы не переопределите свой метод равенства и хэш-кода, использование map не очень полезно.

0 голосов
/ 11 сентября 2011

вы должны использовать объект
, если вы хотите использовать double, вы можете использовать класс-оболочку Double, вы не можете использовать примитивный тип данных, например int или long или double, если вы хотите использовать один, вы можете искать оболочкукласс, который представляет его

Строка является окей, поскольку это класс

0 голосов
/ 11 сентября 2011

В качестве ключа вы можете использовать любой Object, уникальный для вашего набора данных.Вы не можете использовать int или double, но вы можете использовать Integer или Double.Обратите внимание, что ключ может иметь только одно значение, следовательно, это требование для уникального объекта.Если вы добавите один и тот же ключ дважды, в Map

будет сохранено только второе значение.
...