比如我
String str=new String("dajihao");
那么对于这个str肯定生成了一个hashcode了
但是有没有相应的key呢 因为我记得当初学数据结构的时候
用到了hashcode函数都要用到key啊 都是用key去着这个value啊

解决方案 »

  1.   

    hashCode是方法,调用时才生成,不使用哈西表,这个方法就不会被用到
      

  2.   

    调用 hashcode() 时返回一个int,你可以看看实现
      

  3.   

    是的,任何JAVA对象都会自动生成一个hashcode,这是Object class的默认行为之一,所有对象皆继承自Object,所以如果不在自己的class中override hashcode method,便自动继承了Object的hashcode方法,但是在实现你自己的class时,使用默认行为的hashcode可能产生不安全性,期望拥有一套简单的hashcode法则,可以参考《Thinking in java》,《Effective java》,《Code Complete》 and so on,这些书中都有描述如何简单实现自己的hashcode的一套原则与实践,你可以引做参考。另外,所谓的key则是由你自己指定的,系统并不会自动生成,因为key仅仅代表你期望代表的某种事物的代号,并不是对象必须拥有的特性。@.@||~
      

  4.   

    谢谢楼上的
    那么这个和咱们数据结构里面的hashtable有什么不一样呢
    我记得用他们的时候是用key来着相应的value的 
    还有 为什么值相同的对象的hasncode的值会一样的呢还有平时我们用到这个东西多吗  一般都什么时候用到呢
    为题简单望见谅
      

  5.   

    在JAVA ONE时,JDK类库中有一个Hashtable class(目前依然存在,但更多得是为了向下兼容),该类得意图就是为了模仿我们熟悉得hashtable得相关行为(从名字中也能够看出两者之间得关系)。关于为什么值相同的对象必须具有相同的hashcode,这里你必须确定你理解了“相同对象”得含义,相同对象意味着 object1.equals(object2) is true,由于引用得关系,“相同”对象在面向对象得世界里显得有些复杂,更深入得探讨可以在《Effective java》 and 《Thinking in java》and 《Core java》中找到,在这里只要简单的理解 RMB ten1 = new RMB(10);
    RMB ten2 = new RMB(10);
    ten1.equals(ten2) is true;这里有两个面值为10元的人民币对象,但我认为他们彼此相等,这被称为值对象(value object),在对许多对象的使用中,我们重视的是他们所代表的值而不是对象本身,一张10元人民币与另一张10元人民币本质上没有区别,你获得哪一张都代表你获得了10元人民币,hashtable通过hashcode快速查找某个对象,如果我期望快速查找10元人民币,那么我们并不是要去获得特定编号的那张纸币,仅仅是拿出一张纸币面额10就好了,如果我们会去查找特定编号的纸币,那么就失去了快速查找的意义,同时您的对象的关注点也不再是币值的面额,并且必须认真考虑ten1.equals(ten2) is false了。关于hashtable可以查阅有关数据结构得资料,关于hashtable class得更深入资料可以查阅JDK Document。数据结构使用广泛,java collection自然也就使用颇多,刚刚和一个同事讨论了一个hashmap得误用,所以必须深入了解才行。
    @.@||~
      

  6.   

    另外,由于某些原因,再JAVA2中,SUN重新编写了她的那个糟糕的hashtable class,改用了hashmap class取而代之,但再含义上,两者等价。@.@||~
      

  7.   

    太感谢你了  真不知道说什么好了 
    hashmap是异步的
    那么你所说的误用因该值得是什么情况呢?
    如果有时间就说说  让大家也长长见识
      

  8.   

    我们用java解决实际问题。欢迎有经验的java程序员加入我们的讨论,因人数接近上限,初级人员暂时不能加入,请谅解。QQ 群:3001581