如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?

如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?

----答案是 可以

原因:

在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。

这里不可以重复是说equals和hashcode只要有一个不等就可以了。

一、当我们向一个set、HashMap、HashSet、HashTable集合中添加某个元素,集合会首先调用该对象的hashCode方法,

这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。
若该处已经有元素存在,就调用equals方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置

二、hashCode重要么?
对于List集合、数组而言,他就是一个累赘,不重要;但是对于HashMap、HashSet、HashTable而言,它变得异常重要。

 
 

 

测试代码:

package com.rainy.test;

import java.util.HashSet;
import java.util.Set;

public class App {
    public static void main(String[] args) {
        Set<A> set = new HashSet<A>();
        A a1 = new A();
        A a2 = new A();
        a1.a = "1";
        a2.a = "2";
        
        set.add(a1);
        set.add(a2);
        
        for (A a : set) {
            System.out.println(a.a);
        }
    }
}

class A {
    
    public String a;
    
    @Override
    public boolean equals(Object obj) {
        A obja = (A)obj;
        return this.a.equals(obja.a);
    }
    
    @Override
    public int hashCode() {
        return 1;
    }
    
}

代码结果:

2
1

 

posted on 2016-04-24 11:39  舒润  阅读(1012)  评论(0编辑  收藏  举报

导航