方法比如
equals
hashcode。为什么要重写呢?

解决方案 »

  1.   

    楼上说的,我也是这么认为的,不过如果要重写equals的话,那么一般也要同时重写hashcode
      

  2.   

    说的对,重写equals方法后重写hashcode方法是为了提高哈希表的性能,在哈希表中一般是通过每个数据的hashcode值(就是hashcode方法的返回值)相等和equals方法的结果为true而决定,所以重写了equals方法后最好重写hashcode方法,这样就能维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 有利于提高哈希表性能~~
      

  3.   


    不是什么性能啊。是为了防止map的key无法区别不同的对象啊,很多对象无法区别开来啊
      

  4.   

    compareto方法必须重写,其他没有要求
      

  5.   

    如果用comparator的话 就自己写一个比较器 实现compare即可
    如果用comparable的话 就一定要在实现类里面实现 compareTo
    实际上如果使用IDE的话你可以选择自动添加未实现的方法 很方便的
    至于equals 和hashcode方法就如同3楼所说,当你用hashset时,所添加的对象是依赖hashcode方法的,虽然你不写编译不会报错,但是为了使得代码效率更高还是手动将hashcode和equals方法写上
      

  6.   

    如果用comparator的话 就自己写一个比较器 实现compare即可 
    如果用comparable的话 就一定要在实现类里面实现 compareTo 
    就是这样,自己试下就都清楚了。
      

  7.   


    这个我知道啊
    但是
    equals 
    hashcode是不是要重写啊如果不重写会不会有问题啊?
      

  8.   


    是啊 ,如果造出key相同而value不同,那么要他们两个对象将放在同一个哈希桶里,那样就会影响查找的性能!
      

  9.   

    这个问题可以这样来理解:
      1、如果你要比较基本数据类型,重写就没有必要
      2、如果你要比较的是引用类型,那么怎么能判断该类型是同一对象呢?这就是问题的关键
      3、hashcode是根据每个对象的内存位置来计算,因此不同的对象会有相同的hashcode
      4、如果你要强制两个不同的对象相同,要么持有相同的引用,要么重写hashcode及equals方法,如两个学生对象,你可以重写认为只要名字相同就是同一对象
      5、因此排序时才能够按照你预想的思路去实现个人的一点鄙见