我知道散列码相等,就代表是同一个对象,但是我还想知道散列码的更多的知识,请高手们介绍一下.谢谢.

解决方案 »

  1.   

    hashCode相同不一定是一个对象,是一个多对一的关系,对象不同,有可能HashCode相同的,这个时候就要有冲突算法
      

  2.   

    apache有开源项目,override equals的时候不需要自己写.
      

  3.   

    我的理解是:“散列码”就是用来把一堆对象散到各自的队列里去的一种标识码。举个形象一点的例子,一年有 365 天,从 1 编号到 365,下面我定义一种编码方法,每个人按照他生日那天的编号作为他的标识码,这样,一群人每个人就会有一个标识码。这个标识码有什么用呢?好,下面我说,请所有单号的人站到一起,所有双号的人站在一起。此后,当我要找一个人的时候,如果知道他的编号是单号,那我只需要到前面一堆人里去找,查找效率提高了一倍。如果我说,请编号能被 16 整除的人站到一起,被 16 除余 1 的人站到一起,被 16 除余 2 的人站到一起…… 此后,当我要找一个人的时候,查找效率就会提高到 16 倍。这就是散列码。所以,一个好的散列码算法,配合一个适当的存储机制,就能够实现高效的存储管理。那么,不好的散列码算法会有多糟糕呢?比如,hashCode() 返回一个常量,那么,无论什么存储机制都会退化,所有的人都站在一堆里,查找效率无法提高。不过,也就只是影响效率,不会影响“正确性”,因为散列码的本性决定了,所有的算法都不应该假设两个不同的对象必须有不同的散列码。
      

  4.   

    看看HashMap和HashSet就知道他有啥用了。
      

  5.   

    TO King_Play: HashCode和HashMap或HashSet有联系吗?
      

  6.   

    我知道散列码相等,就代表是同一个对象?
    这句是错的!可以反过来说:如果是同一个对象或者equals的对象,那么散列码相同。
      

  7.   

    散列码在你使用HashSet或者HashMap的时候有用,你需要为自己的对象定义equals方法和hashCode方法。
    至于它的用处,maquan('ma:kju)的讲法可以帮助你理解。