首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java HashMap containsKey函数

Java HashMap containsKey函数
EN

Stack Overflow用户
提问于 2014-07-17 14:27:34
回答 5查看 1.4K关注 0票数 0

请告诉我HashMap的函数containsKey(),它是如何在内部工作的。是否使用equalshashcode函数来匹配密钥。我将string密钥用于hashmap,当我动态使用该密钥时,containskey将返回false。例如(只是一个示例代码,而不是我在应用程序中使用的原始代码)

代码语言:javascript
复制
class employee {
    employee(String name) {
       return name;
     }
}

class test {
    HashMap hm = new HashMap();
    hm.put("key1",new Employee("emp1"));
    hm.put("key2",new Employee("emp2"));
    hm.put("key3","emp4");
    hm.put("new Employee("emp5")","emp4");
    System.out.println(hm.containsKey("emp5"));
}
EN

回答 5

Stack Overflow用户

发布于 2014-07-17 14:34:46

关键字是一个Employee对象,而不是字符串,在containsKey中有一个字符串。该比较将返回false,因为字符串"emp5“不等于对象Employee。

以下是containsKey文档中的一句话:

如果此映射包含指定键的映射,则

返回true。更正式地说,当且仅当此映射包含键k的映射时才返回true,使得(key==null?k==null : key.equals(k))

因为在你的例子中key是一个字符串,只有当k也是一个字符串并且它的内容与key相同时,'equals‘才会返回'true’。

票数 2
EN

Stack Overflow用户

发布于 2014-07-17 14:57:47

您的代码有许多错误,这是无效的hm.put("new Employee("emp5")","emp4");

在集合中也使用泛型类型

代码语言:javascript
复制
HashMap<String,employee> hm = new HashMap<String,employee>();

并将你的类命名为Employee而不是employee,类名以大写开头。此外,您调用的是new Employee,而您的类名是employee

根据hashMap的source。它在内部调用键上的equals() (在本例中,这意味着Stringequals )

代码语言:javascript
复制
public boolean containsKey(Object key)
 {
 int idx = hash(key);
 HashEntry<K, V> e = buckets[idx];
  while (e != null)
   {
    if (equals(key, e.key))
    return true;
    e = e.next;
   }
   return false;
 }

你的有效代码(假设你没有尝试实现一些不寻常的东西)应该是这样的:

代码语言:javascript
复制
class Employee {
    String name;

    Employee(String name) {
        this.name = name;
    }
}

class Test {
    public void hello() {
        HashMap<String,Employee> hm = new HashMap<String,Employee>();
        hm.put("key1", new Employee("emp1"));
        hm.put("key2", new Employee("emp2"));
        hm.put("key3", new Employee("emp4"));
        hm.put("key4", new Employee("emp5"));
        System.out.println(hm.containsKey("key4")); 
     }
}
票数 1
EN

Stack Overflow用户

发布于 2014-07-17 14:41:03

已更正的代码:

代码语言:javascript
复制
HashMap hm= new HashMap();
hm.put("key1",new Employee("emp1"));
hm.put("key2",new Employee("emp2"));
hm.put("key3","emp4");

System.out.println(hm.containsKey("key1"));

这将返回true

您正在根据字符串键保存Employee对象。所以你需要检查有效的密钥。在您的示例中,在向哈希图添加元素时,emp5不被用作键。

对于你的第二个问题:它首先在内部检查密钥的哈希码。如果hashcode相同,它将检查equals方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24796299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档