Получить ключ из HashMap, используя значение
Я хочу получить ключ HashMap, используя значение.
hashmap = new HashMap<String, Object>();
haspmap.put("one", 100);
haspmap.put("two", 200);
Что означает, что я хочу функцию, которая примет значение 100 и вернет строку.
Кажется, здесь есть много вопросов, задающих одно и то же, но они не работают для меня.
Возможно, потому что я новичок в java.
Как это сделать?
Ответы
Ответ 1
Метод put в HashMap определяется следующим образом:
Object put(Object key, Object value)
ключ - это первый параметр, поэтому в вашем ключе "один" - это ключ. Вы не можете легко найти значение в HashMap, если вы действительно хотите это сделать, это будет линейный поиск, сделанный вызовом entrySet()
, например:
for (Map.Entry<Object, Object> e : hashmap.entrySet()) {
Object key = e.getKey();
Object value = e.getValue();
}
Однако, что O (n) и вид поражения цели использования HashMap, если вам только нужно делать это редко. Если вы действительно хотите, чтобы иметь возможность искать ключ или значение часто, ядро Java не имеет ничего для вас, но что-то вроде BiMap из Коллекций Google - это то, что вы хотите.
Ответ 2
Мы можем получить KEY
из VALUE
. Ниже приведен пример кода_
public class Main {
public static void main(String[] args) {
Map map = new HashMap();
map.put("key_1","one");
map.put("key_2","two");
map.put("key_3","three");
map.put("key_4","four");
System.out.println(getKeyFromValue(map,"four"));
}
public static Object getKeyFromValue(Map hm, Object value) {
for (Object o : hm.keySet()) {
if (hm.get(o).equals(value)) {
return o;
}
}
return null;
}
}
Надеюсь, это поможет всем.
Ответ 3
- Если вам это нужно, просто используйте
put(100, "one")
. Обратите внимание, что ключ является первым аргументом, а значение - вторым.
- Если вам нужно получить ключ и значение, используйте
BiMap
(из guava)
Ответ 4
Вы смешали клавиши и значения.
Hashmap <Integer,String> hashmap = new HashMap<Integer, String>();
hashmap.put(100, "one");
hashmap.put(200, "two");
Затем
hashmap.get(100);
даст вам "один"
Ответ 5
У вас все наоборот. 100 должен быть первым параметром (это ключ), а "один" должен быть вторым параметром (это значение).
Прочитайте javadoc для HashMap и это может вам помочь: HashMap
Чтобы получить значение, используйте hashmap.get(100)
.
Ответ 6
public class Class1 {
private String extref="MY";
public String getExtref() {
return extref;
}
public String setExtref(String extref) {
return this.extref = extref;
}
public static void main(String[] args) {
Class1 obj=new Class1();
String value=obj.setExtref("AFF");
int returnedValue=getMethod(value);
System.out.println(returnedValue);
}
/**
* @param value
* @return
*/
private static int getMethod(String value) {
HashMap<Integer, String> hashmap1 = new HashMap<Integer, String>();
hashmap1.put(1,"MY");
hashmap1.put(2,"AFF");
if (hashmap1.containsValue(value))
{
for (Map.Entry<Integer,String> e : hashmap1.entrySet()) {
Integer key = e.getKey();
Object value2 = e.getValue();
if ((value2.toString()).equalsIgnoreCase(value))
{
return key;
}
}
}
return 0;
}
}
Ответ 7
если вы хотите получить "ОДИН" путем предоставления в 100, тогда
инициализировать хэш-карту на
hashmap = new HashMap<Object,String>();
haspmap.put(100,"one");
и получить значение на
hashMap.get(100)
надеюсь, что это поможет.
Ответ 8
Если вы не используете Hashmap, я бы посоветовал использовать пару < T, T > .
Доступ к отдельным элементам осуществляется с помощью первых и вторых вызовов.
Посмотрите на это http://www.cplusplus.com/reference/utility/pair/
Я использовал его здесь: http://codeforces.com/contest/507/submission/9531943