Какие типы мы можем назначить для K в HashMap <K, V>? - PullRequest
0 голосов
/ 21 сентября 2011

Какие типы мы можем присвоить K в HashMap<K,V>? Это только числовые типы (int, float) или мы можем назначать определенные пользователем объекты?

Ответы [ 5 ]

10 голосов
/ 21 сентября 2011

Вы можете использовать любой тип, если он имеет реализацию equals() и hashCode().

Строго говоря, вы можете использовать любой ссылочный тип, но он не будет работать должным образом, если у типа нет разумных реализаций этих методов.

Обратите внимание, что вы не можете использовать примитивные типы (int, float, ...), но вместо этого могут использовать их типы-оболочки (Integer, Float, ...).Это потому, что дженерики могут обрабатывать только ссылочные типы.

6 голосов
/ 21 сентября 2011

Вы можете задавать пользовательские объекты, но это хорошая идея, чтобы явно определять методы hashCode и equals в этих классах.

Нельзя использовать int или float, поскольку они являются примитивными типами, которые не являются производными от суперкласса Object (который обеспечивает реализацию по умолчанию hashCode() и equals()). Если вам нужно использовать целые числа или числа с плавающей запятой, вам нужно использовать их классы-обертки для объектов Integer и Float

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

Вы можете присвоить любой класс K, включая примитивные типы в их объектных формах (Integer, Character ...).

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

Единственные типы, которые вы не можете использовать, это примитивы (и void), вместо этого вы можете использовать класс-оболочку.т.е. ключ и значения должны быть объектом (или нулем).

Если вы хотите использовать примитивы, я предлагаю рассмотреть trove4j, который предназначен для эффективной обработки примитивов в коллекциях.

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

Любой объект может быть использован в качестве ключа.

  1. если вы используете пользовательский объект класса в качестве ключа, будьте очень осторожны с методом переопределения hashCode, равным.

  2. позаботьтесь об использовании изменяемого объектав качестве ключа.Поведение карты не указывается, если значение объекта изменяется таким образом, что это влияет на сравнение с равными, в то время как объект является ключом на карте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...