为什么重写了 compareTo方法还要让equals方法与之对应,还要重写equals方法?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【xoxong】截止到2008-06-30 22:55:45的历史汇总数据(不包括此帖):
    发帖数:0                  发帖分:0                  
    结贴数:0                  结贴分:0                  
    未结数:0                  未结分:0                  
    结贴率:-------------------结分率:-------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    好象不用吧 HashSet许重写 equals() 和hashCode()
      

  3.   

    楼主好像API文档中也没有像你说的那样哦,并没有说实现了compareTo就必须实现equals哦,
      

  4.   

    呵呵,我说的是有点问题,我的意思是说compareTo方法会调用equals方法吗?
      

  5.   

    这跟集合类,像TreeSet等有关系,因为有些容器里不允许放重复元素。
      

  6.   

    绝对不会,除非你是这样写的!
    当你继承comparablede,复写compareTo的时候,代码完全由你定制.
    它和equals是完全不相关的!
      

  7.   

    你的元素要排序的话   要为你的元素重写compartTo()  
    set里面不允许重复  所以你要重写equals()和hashCode()方法
      

  8.   

    我也想问一下compareTo,equals方法的区别!
      

  9.   

    回楼上
    equals比较两个对象的值是否相等,返回的是true or false
    compareTo也是比较两个值的大小,相等返回0,前者小返回-1,前者大返回1。
    再有就是==比较两个对象的地址是否相等,返回的也是true or false
      

  10.   


    compareTo方法相等的规则你来作主,可以认为姓名相同就是同一个对像.就不能放到SET里.
      

  11.   

    这个与集合框架有关
    1>我们有些集合类会自动对里面的元素进行排序,如:TreeSet,TreeMap等
    2>那么,集合如何知道你放如其中的类应该按什么顺序排序呢?
    3>这里就要用到接口Comparable了,放入自动排序的集合的类要实现其中的CompareTo()方法,这样一来
      集合就知道如何对你放入的类(可能是你自己定义的类,这个时候是一定要实现Comparable)进行排序了
    4>如果类没有实现Comparable,那么,在初始化自动排序的集合的时候,我们也可以用Comparator接口来进行指定排序.几个概念:
    1>自然排序:实现Comparable,进行排序的方法
    2>比较器:实现了Comparator的类,可对特定的类进行排序另:在使用集合的时候,很多时候,我们应该让自然排序与equals()的行为一致(并没有强制规定一定要),比如   
       BigDecimal就没有一致.(API中有说明),但是,如果类的自然排序与equals()的行为不一致时,在使用有序
       集合的时候就应该小心了,因为,可能会产生无法预料的结果.
    另:在使用Set的时候,集合内所有的类都一定要重写了equals()(因为.Set不能重复,它用的就是equals()来判断的)注:以上在API中都有说明
      

  12.   

    给你个comPareto的例子
    import   java.util.*;   class JiangXu implements Comparator<Integer>{
    //Implement the compare() method so that it
    //reverses the order of the integer comparison.
    public int compare(Integer A,Integer B){
    return B.compareTo(A);
    //return A-B;
    //return 0;
    }
    }
        
      public   class   PaiXu2
      {   
            public   static   void   main(String[]   args)   
           {   
                      new   PaiXu2().zou();   
            }   
            public   void   zou()   
           {   
                     Integer  ZhengShu[]   =   {2,5,7,8,6,3,18,6};   
                     JiangXu FanGuoLai=new JiangXu();
        
                     Arrays.sort(ZhengShu,FanGuoLai);   
                     for(int   i   =   0;   i   <   ZhengShu.length;   i++)   
                    {   
                         System.out.println(ZhengShu[i]);   
                    }   
            }   
      }
      

  13.   

    是否重写compareTo,equals,hashcode方法和你的对象在什么集合中使用有关。为了保证在集合中正确找到对象,一般情况下equals都是需要实现的。另外
    如果你使用的集合有自动排序,则需要实现compareTo,如TreeSet,TreeMap
    如果你使用的集合有哈希索引,则需要实现hashcode,如HashMap,LinkedHashMap,HashSet