Могу ли я объявить HashMap <key>вместо HashMap <ключ, значение>? - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь вставить ключи в хэш-карту, но мне не нужны вставленные значения. Я мог бы, но они не будут использованы. Я знаю, что хеш-карты могут принимать нулевые ключи и значения, но только один нулевой ключ, пару значений. Я мог бы map.put(key,null) со значениями, равными нулю, но этот метод кажется неэффективным. Я намерен использовать метод map.containsKey(key), чтобы определить, существует ли ключ в хэш-карте, поэтому мне не нужно значение.

С учетом сказанного, есть ли способ объявить HashMap<key> вместо HashMap<key,arbitraryValue>, чтобы мне не пришлось добавлять ненужные нулевые значения? Извините, если это глупый вопрос.

1 Ответ

0 голосов
/ 08 марта 2019

Как сказал Джейкоб Г. , вы должны использовать Set<E>.

Набор - это просто коллекция, которая не содержит дубликатов. Реализующий класс HashSet<E> фактически использует HashMap<K,V> под капотом, как упомянуто Ole VV , но использование Set<E> в вашем коде является лучшим подходом IMO, потому что Ваша проблема не требует значений.

Кроме того, существует проблема с использованием HashMap<K,V>, где все ваши значения null в методе get(K key). Этот метод вернет null, если у запрошенного key нет связанного значения. Так как узнать, вернул ли ваш звонок get верный или недействительный null? т.е.

Map<Integer, Object> map = new HashMap<>();

// add entry 0 -> 
map.put(0, null);

Object get1 = map.get(0); // returns null, so 0 must be a key in our map!
Object get2 = map.get(1); // also returns null, so is 1 a key too? No!

Итак, для вашей конкретной проблемы я бы попробовал что-то вроде этого!

Set<MyKey> set = new HashSet<>(); // or any implementing class

...

MyKey someKey = ...

// Check if your key set doesn't have some key, if so add it to the key set
if (!set.contains(someKey)) {
  set.add(someKey);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...