如何避免在HashMap中插入重复值?

如何避免在HashMap中插入重复值?,hashmap,duplicates,Hashmap,Duplicates,假设我们有: Map hm=新的HashMap() 如何避免在此HashMap中放置重复的值(雇员)?不确定您使用的是什么语言,但在java for HashMap中,它们是: 布尔containsKey(对象键) -如果此映射包含 指定的密钥 及 布尔包含值(对象值) -如果此映射将一个或多个键映射到 指定的值 只需调用对您更有意义的选项,检查条目是否已在地图中,如果已存在,则您知道它是重复的,否则将其放入。我确信你使用的任何语言都会有相似之处 我假设您使用Java编写代码,因此: if(!m

假设我们有: Map hm=新的HashMap()


如何避免在此HashMap中放置重复的值(雇员)?

不确定您使用的是什么语言,但在java for HashMap中,它们是:

布尔containsKey(对象键) -如果此映射包含 指定的密钥

布尔包含值(对象值) -如果此映射将一个或多个键映射到 指定的值


只需调用对您更有意义的选项,检查条目是否已在地图中,如果已存在,则您知道它是重复的,否则将其放入。我确信你使用的任何语言都会有相似之处

我假设您使用Java编写代码,因此:

if(!myMap.containsKey(myKey)){
    myMap.put(myKey, myValue);
}
HashMap
的好处在于
containsKey
方法需要固定的时间(或固定的摊销时间),而不考虑映射中的元素数量,因此您可以调用它,而不必考虑它可能需要的时间


如果您使用其他语言,则逻辑保持不变。

我认为,如果您的用户定义对象被对象类中的equals和hashcode覆盖,则可以使用此通用方法删除Map中的重复值

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;
}
公共静态映射genericMethodtoDeleteMapduplicate(映射pMap){
Map mapWithoutDup=新建HashMap();
Set totalvaluesPresent=new HashSet();
对于(Map.Entry a:pMap.entrySet()){
if(totalvaluesPresent.add(a.getValue())){
mapWithoutDup.put(a.getKey(),a.getValue());
}
}
返回不带DUP的映射;
}

非常感谢,我正在使用java,我知道这两个函数,我不知道为什么有人告诉我在employee中实现equal和hashcode,我感到困惑。当你向HashMap添加对象时,重写hashCode和equals方法是一种很好的做法:如果我们有containKey和containValue方法,为什么要重写它们的hashCode和equals方法呢?当你将一个对象放入一个映射时,它会根据它的哈希(hashCode方法的结果)添加到某个位置。调用containsKey(key)时,将计算该键的散列,并检索映射中放置在该键对应位置的对象,如果该对象不为null(表示已插入具有相同散列的对象),则如果您的键与该检索对象在==方面相等,则返回true(内存中的同一对象)或者如果key.equals(retrievedObject)返回true。因此,您可能希望实现这两种方法!非常感谢Vakimshaar,我感谢您的帮助和时间。是否可以放一个小示例?