【转】java ==、equals、compareTo、compare、sort在比较上的应用

关于java语言中的比较:

1、
        ==是运算符,其它都是方法
       
2、
        == 和 equals  的返回值都是 boolean型,用于比较两者的值是否相等(内容是否相同);
    例:
    if ( a ==  b )    { ...  };

    if ( a.equals( b )  )    { ...  };    

3、  ==  运算符:当操作数是基本数据类型时,比较两者的值;当操作数是封装类型时,比较的是对象的引用地址,

4、  equals是Object类中的方法,自定义类自动继承Object类,无需显式写出。

        
        Object中equals方法的实现是直接用==运算符比较,即比较两者的地址。
        public boolean equals(Object  obj) {
            return this == obj;
        }

        一般实际需求都是比较内容,而不是地址,所以当需要比较时,我们都会重写equals方法,在equals方法中可能又要用到hashCode方法。
        八大基本数据类型的封装类型均重写了equals方法:
           public boolean equals(Object  obj )  {    // 以Integer 封装类型为例
              if ( obj instanceof Integer ){   //  用 instanceof判断是否是同一数据类型,否则不相等
                    return this.value==((Integer) obj ).intValue();    //  拆封,直接比较基本类型数据的值
                }
             return false; 
          }  

5、  comparaTo   和   compare 方法都是用于集合的排序Collections.sort。
        两个方法的返回值都是int型,结果有大于、小于、等于三种值,用于给数据排序,负数表示小于、0表示相等、正数表示大于。

        集合工具类 Collections类中的sort方法是用于对集合进行排序。Collections类中名称为sort的方法有两个,其中一个调用的是comparaTo方法,一个调用的是compare方法。

       compareTo方法是接口Comparable中的方法,自定义类实现了Comparable接口后,其类实例的集合就可以作为Collections.sort方法的参数,此方法会返回一个实例有序的集合。

         compate方法是接口Comparator中的方法,通常用在自定义类定义时没有实现Comparable接口,但是又有对类实例的集合进行排序的需求时。假如需要进行集合排序的类为A,则可以定义一个比较器AComparator类,实现Comparable接口,并将类A作为泛型参数。就可以调用Collections.sort方法,传两个参数,一个是类A的实例集合,一个是AComparator.class,sort方法会用调用AComparator中的compare方法对集合数据进行排序

        两个接口定义的主要目的是一样,都是为了实现排序:Collections.sort,只是 Comparable接口 在类定义时就需实现,而如果类定义时没有考虑到排序问题,则需要用comparator接口扩展实现:

  1. public static <T extends Comparable<? super T>> void sort(List<T> list) {  
  2.     Object[] a = list.toArray();  
  3.     Arrays.sort(a);      
  4.     ListIterator<T> i = list.listIterator();  
  5.           for (int j=0; j<a.length; j++) {  
  6.                i.next();  
  7.                i.set((T)a[j]);  
  8.            }  
  9.  }
 
  1. public static <T> void sort(List<T> list,Comparator<? super T> c) {  
  2.     Object[] a = list.toArray();  
  3.     Arrays.sort(a,(Comparator)c);      
  4.     ListIterator<T> i = list.listIterator();  
  5.           for (int j=0; j<a.length; j++) {  
  6.                i.next();  
  7.                i.set((T)a[j]);  
  8.            }  
  9.  }
        
    

        comparaTo   和  compare 方法用于集合的排序,两个方法的返回值都是int型,结果有大于、小于、等于三种值,用于给数据排序,负数表示小于、0表示相等、正数表示大于。

        若要对某集合实例进行排序,可以调用集合工具类 Collections类中的sort方法。

        Collections类中名称为sort的方法有两个,其中一个sort方法调用的是comparaTo方法,一个sort方法调用的是   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值