今天忽然和同学讨论这个问题,我的坚持是认为和地址相关,并且哈希码是惟一的。

解决方案 »

  1.   

    是不是唯一的要看内容和哈希函数了如果哈希函数是 Hash(x)= x 那哈希值就是唯一的如果哈希函数是 Hash(x)= x MOD 10 这样的,那哈希值就不是唯一的第二种情况会产生冲突,就是多个关键字产生同一个哈希值,这时就要使用一些方法来处理冲突
      

  2.   

    只有Object类的hashCode()方法返回的是内存地址.
      

  3.   

    同一个对象的HashCode肯定是一样的不同对象的HashCode不一样
    不过不是绝对,要看你的hash算法好不好了,目前比较好的hash算法可以达到上亿分之一才有可能不同对象重复同一个HashCode数据结构里说过了,这是避免不了的
      

  4.   

    就是调用Object的hasCode,看你怎么重写了,不重写的话就是
    实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。) 
      

  5.   

    public class Hash {
       public static void main(String[] args) {
          C x = new C();
          C y = new C();
          System.out.println(x.hashCode());
          System.out.println(y.hashCode());
       }
    }
    class C{}
    同一类型对象的hashcode是不一样的/////
      

  6.   

    equals相同hashcode肯定相同,hashcode相同equals不一定相同
      

  7.   

    对于自定义类的比较,一般都会重写equals()方法和hashCode()方法。
    hashCode的计算方式越复杂,冲突的可能性越小。
      

  8.   

    不知道大家会不会变个小例子试试。
    13楼的例子,明确的。
    equals相同
    但哈希码不一样。
      

  9.   

    首先你要明确跟别人讨论问题的范围,你说的是hash吗,还是java中的hashcode方法?
    如果单纯说hash的话,是一种数据结构,跟地址没什么关系,看你的hash函数怎么定义的。4楼的例子很好。
    如果说的是java中的hashcode()方法,那也要看具体实现。Object的实现是对地址进行处理得到的,比如13楼的例子,这时候是跟地址有关的。但是你看看别的类呢,比如String类、Integer类,它们都有自己计算hashcode的方式,就跟地址没有关系了。
    public class Test {    public static void main(String[] args) {
            Integer int1 = 5;
            Integer int2 = 6;
            System.out.println(int1.hashCode());
            System.out.println(int2.hashCode());
            String str1 = "Hello";
            String str2 = "World";
            System.out.println(str1.hashCode());
            System.out.println(str2.hashCode());
        }
    }
    所以,不要认为hashcode就是和地址相关的。
      

  10.   

    "同一个类生成的对象哈希码必不一样", 从规则上说应该是这样的,关键还是看hashcode函数是如何计算hash码的,如果设计的不好,冲突现象是难免的,也就不能说“同一个类生成的对象哈希码必不一样”。
    举一个极端的例子:
    public class Test {    @Override
        public int hashCode() {
            return 5;
        }    public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test();
            System.out.println(t1.hashCode());
            System.out.println(t2.hashCode());
        }
    }
    Test类的所有对象hashcode都是一样的。
      

  11.   

    x与y是不等的啊
    所以:
    如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 
    如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。