Как избежать вставки повторяющихся значений в HashMap? - PullRequest
1 голос
/ 02 сентября 2011

Допустим, у нас есть: Карта hm = new HashMap ();

Как не помещать повторяющиеся значения (Emplyees) в эту хэш-карту?

Ответы [ 3 ]

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

Я предполагаю, что вы кодируете на Java, поэтому:

if(!myMap.containsKey(myKey)){
    myMap.put(myKey, myValue);
}

Хорошо с HashMap является то, что метод containsKey требует постоянного времени (или постоянного амортизированного времени) независимо от количестваэлементы на вашей карте, чтобы вы могли вызывать ее, не беспокоясь о времени, которое это может занять!

Если вы используете другой язык, логика остается той же.

1 голос
/ 14 декабря 2017

Я думаю, что повторяющиеся значения в Map могут быть удалены с помощью этого универсального метода, если ваш пользовательский объект переопределен с помощью equals и hashcode из класса объекта

public static <K, V > Map<K,V> genericMethodtoDeleteMapduplicate(Map<K, V> pMap) {
    Map<K,V> mapWithoutDup=new HashMap<>();

    Set<V> totalvaluesPresent=new HashSet<>();
    for (Map.Entry<K, V> a : pMap.entrySet()) {
        if(totalvaluesPresent.add(a.getValue())){
        mapWithoutDup.put(a.getKey(), a.getValue());
        }
    }
    return mapWithoutDup;
}
0 голосов
/ 02 сентября 2011

Не уверен, какой язык вы используете, но в Java для Hashmap они:

логическое содержит ключ (объектный ключ) - Возвращает true, если эта карта содержит отображение для указанный ключ.

и

логическое содержитValue (значение объекта) - Возвращает true, если эта карта отображает один или несколько ключей на указанное значение.

Просто позвоните по любому из них, который имеет больше смысла, чтобы проверить, есть ли запись на карте, если это так, то вы знаете, что она дубликат, в противном случае вставьте ее. Я уверен, что любой язык, который вы используете, будет иметь нечто подобное !!

...