Как создать метод для получения ключа значения (строки) в хэш-карте - PullRequest
1 голос
/ 17 февраля 2011

У меня есть назначение. Это моя инициализация HashMap. Я могу использовать только стандартный JAVA API.

private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>();

Можно ли получить ключ указанного значения, скажем, getkey (hMap, "today"), и он вернет ключ, в котором находится сегодняшний день.

А есть ли способ получить последнее значение ключа в моем HashSet?

Любая помощь приветствуется!

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Но на самом деле вы можете иметь более одного ключа, который имеет «сегодня». Поэтому я возвращаю List.toString с ключами

private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>();

public static String getKey(Map<String, HashSet<String>> map, String value) {
    List<String> returnKey = new ArrayList<String>();

    for (String s : map.keySet()) {
        if (map.get(s).contains(value)) {
            returnKey.add(s);
        }
    }

    return returnKey.toString();

}

public static void main(String[] args) {
    // put sth to hMap
    System.out.println(getKey(hMap, "today"));
}
0 голосов
/ 17 февраля 2011

В общем, насколько это возможно, ничего, кроме Map.

public static <K,V> K getKey(Map<K,V> map,V val){
    for(Map.Entry<K,V> entry:map.entrySet()){
        if(entry.getValue().equals(val)){
            return entry.getKey();
        }
    }
    return null;
}

Это вернет ключ только первого значения, которое соответствует. Если вы хотите вернуть все ключи для определенного значения, то вы можете изменить этот метод, чтобы накапливать ключи в List и возвращать его вместо этого.

(Не надейтесь на скорый поиск ...)

0 голосов
/ 17 февраля 2011

То, что вы действительно хотите, это Google Guama BiMap .

Двунаправленная карта (или «двунаправленная карта») - это карта, которая сохраняет уникальность своих значений, а также ключей. Это ограничение позволяет бимапам поддерживать «инверсное представление», которое представляет собой еще один бимап, содержащий те же записи, что и этот бимап, но с обращенными ключами и значениями.

Если вы не можете использовать это, то вам придется перебирать элементы ввода карт, чтобы найти совпадение, которое не слишком быстрое.

...