自定义的类要作为key放入HashMap时需重载hashcode方法,听人说好的hashcode和次的性能差别很大,所以找到的别人设计的日期类的hashcode{
  return getDay() + getMonth() * 256 + getYear() * 65536;
}
这么设计的原理是什么? 另外 我想设计一“日期时间”类 应该怎么设计hashcode()呢?先谢了!

解决方案 »

  1.   

    xxxx year xx month xx day 00:00:00
    的time的hashCode()
      

  2.   

    hash算法中允许两个不同的对象返回相同的hashcode,这个叫同义词,同义词越多hash算法的效率越低。利用hash算法进行检索,需要调用一次或多次hashcode方法,hashcode方法越简单,效率也会越高。因此设计原则有两个:
    1、同义词尽量少;
    2、hashcode方法尽量简单;另外,建议楼主复习一下基础知识,找本算法的书看看。
      

  3.   

    你找的那个hashcode方法非常好,可以保证不同的日期,得到的hashcode都不一样,效率非常高。如果想设计一个“时间日期类”的hashcode方法,那么除了要考虑“年月日”外,还需要考虑“时分秒毫秒”,自己设计很麻烦。其实,不用伤那么多脑筋,Java里已经有现成的,java.util.Date。
      

  4.   

    sorry for time you've been waitting for :)我是为了效率,可能会有上万个日期和时间就把它们分开自己设计了,又要作为hashtable的key还有,估计这个原date算法要乘这么大的8和32是为了对齐吧依葫芦画瓢,time的就用 getSecond() + getMinute() * 256 + getHour() * 65536
      

  5.   

    好什么呀,code越大牺牲的空间也越大吧,能把长度压缩才是好的方法,建议直接压缩成,从1970年1月1日开始的日子数(大小在2BYTE),或者从1970年1月1日起的秒数(大小在4BYTE)