首页 > 试题广场 >

Object作为HashMap的key的话,对Object有

[问答题]
请问,Object作为HashMap的key的话,对Object有什么要求吗?
Hashmap不允许有重复的key,所以要重写它的hashcode和equal方法,以便确认key是否重复
发表于 2019-01-25 23:45:06 回复(0)
Object的equals方法和hashCode方法需要满足一致性要求。

hashCode方法的一致约定要求 
(1)、 在java应用的一次执行过程中,对于同一个对象的hashCode方法的多次调用,他们应该返回同样的值(前提是该对象的信息没有发生变化); 
(2)、对于两个对象来说,如果使用equals方法比较返回true,那么这两个对象的hashCode值一定是相同的; 
(3) 对于两个对象来说,如果使用equals方法返回false,那么这两个对象的hashCode值不要求一定不同(可以相同,可以不同),但是如果不同则可以提高应用的性能。 
(4)、 对于Object类来说,不同Object对象的hashCode值是不同的(Object类的hashcode值表示的是对象的地址)。

Object的equals方法和hashCode方法需要满足一致性要求。而Object的equals方法是比较两个对象的地址,而 hashCode则是 C/C++的原生方法(也是获取内存地址值)。

两者刚好对应,hashcode改变了就可能和equals对应不上。

    public boolean equals(Object obj) {
        return (this == obj);
    }
    public native int hashCode();



发表于 2020-05-24 19:47:40 回复(1)
1.重写hashCode()是因为需要计算存储数据的存储位置,需要注意不要试图从散列码计算中排除掉一个对象的关键部分来提高性能,这样虽然能更快但可能会导致更多的Hash碰撞;
2.重写equals()方法,需要遵守自反性、对称性、传递性、一致性以及对于任何非null的引用值x,x.equals(null)必须返回false的这几个特性,目的是为了保证key在哈希表中的唯一性;
发表于 2020-04-02 16:02:16 回复(0)
引用类型
发表于 2019-02-08 23:22:17 回复(0)
唯一性
发表于 2019-06-06 12:55:50 回复(0)
要求object中的hashcode不能变
发表于 2019-04-30 22:27:15 回复(0)
不能为空
发表于 2019-03-28 22:26:06 回复(0)