2013-11-12 3 views
-1

Я хотел бы получить исходный объект ключа в HashMap на Java, что это лучший способ сделать это?Получить ключевой объект из HashMap в Java

Например

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); 
Integer keyObj = new Integer(10); 
Integer valueObj = new Integer(100); 

// And add maybe 1 million other key value pairs here 
//... later in the code, if I want to retrieve the valueObj, given the value of a key to be 10 
Integer retrievedValueObj = map.get(10); 

//is there a way to retrieve the original keyObj object with value 10 from map? 

В принципе, пользователь может запросить любое значение ключа здесь только для ключевого объекта, 10 является только примером. Некоторые комментарии говорят: «У вас уже есть объект x, почему вы хотите его получить?» Ну, это то же самое, что сказать: «У вас уже есть объект value, почему вы хотите его получить?» Такова цель структуры, хранения и извлечения данных HashMap.

Извлечение объекта значения легко, но кажется, что многие люди не знают, как получить ключевой объект, поэтому этот вопрос определенно полезен, и я не получаю эти голоса по вопросу b/c, они не знают, как сделать это. Именно поэтому нам нужно научиться этому у кого-то, кто знает, как это сделать.

Кажется, что многие люди не понимают, почему я хочу достичь объекта 10 и спросить, почему? почему не просто значение 10. Это просто упрощенная модель.

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

Я очень удивлен, увидев, что некоторые люди не любят вопрос и думают, что это тривиально для значения «10». У меня есть причина спросить. Меня интересует не только значение «10», но и местоположение памяти, то есть ссылка на Java этого объекта «10». В памяти может быть много «10». Но этот точный объект - это то, что я хочу получить.

Ниже представлен подход к подходу итератора (O (n). Но я ищу O (1) извлечение ключа OBJECT с учетом значения ключа.

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

class KeyAndValue { 
    public Integer key; 
    public Integer value; 
    public KeyAndValue(Integer key, Integer value) { 
     this.key = key; 
     this.value = value; 
    } 
} 

map<Integer, keyAndValueL> map = new map<Integer, keyAndValueL>(); 
Integer x = new Integer(10); 
map.add(x, new KeyAndValue(x, 100)); 

//then I can retrieve the reference of x, given value of key 10 
Integer newKeyObj = map.get(10).key; 

, но этот подход использует больше памяти и выглядит как хак для меня. Мне интересно, есть ли более элегантный способ в Java.

Большое спасибо!

+3

Это действительно не имеет никакого смысла. Почему вы хотите получить «ключ» с карты, когда вы уже знаете это ?! – SudoRahul

+0

Вы имеете в виду получить все ключи за заданное значение? Зайдите http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value –

+0

Возможно, вам нужно 'map.keySet()' – Trying

ответ

0

попробовать это

 HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); 
     Integer keyObj = new Integer(10); 
     Integer valueObj = new Integer(100); 
     map.put(keyObj, valueObj); 
     Set<Integer> keys = map.keySet(); 
     Iterator<Integer> iterator = keys.iterator(); 
     while(iterator.hasNext()){ 
      Integer x = iterator.next(); 
      if(map.get(x) == 100) 
       System.out.println("key is "+ x); 
     } 
+0

Это алгоритм O (n), существует ли подход O (1)? –

Смежные вопросы