ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 比较器

2021-07-30 21:04:56  阅读:198  来源: 互联网

标签:compare Java Object o2 obj 排序 比较 o1


目录

Java比较器

自然排序java.lang.Comparable

1.像String、包装类等实现了Comparable接口,重写了compareTo()方法

2.利用Array.sort(Object obj)进行排序,调用comparaTo()方法

默认是从小到大升序
规则:
当前对象this大于形参obj时,返回正数
当前对象this小于形参obj时,返回负数
当前对象this等于形成obj时,返回0

这里按照规则重写方法,这样对对象就可以默认从小到大排序

具体的比较是调用对象的equals方法

  @Override
  public int comparaTo(Object o){
    if(o instanceof Goods){
      Goods goods = (Goods) o;
      //方式一
      if(this.price>goods.price){
        return 1 ;
      }else if(this.price<goods.price){
        return -1;
      }else{
        return 0;
      }
      //方式二
      return Double.compare(this.price,goods.price);
    }
  }
}

自定义排序java.util.Comparator

使用背景

1.元素的类型没有实现java.lang.Comparable接口而又不方便修改代码
2.实现了java.lang.Comparable接口的排序规则不适合当前的操作

实现

重写compare(Object o1,Object o2)方法,比较o1和o2的大小

//obj为需要比较的类
Arrays.sort(Object obj,new Comparator(){
//利用匿名实现类的方法
  @Override
  public int compare(Object o1,Object o2){
    //具体的排序方法
  }
})

compare返回值

1:表示要调整顺序
-1:不用调整顺序

Collections.sort(companyList, new Comparator<String>() {
      @Override
      public int compare(String o1, String o2) {
	if(o1.compareTo(o2) < 0 ){?}
     });

如果你想升序,那么o1比o2小就是我想要的;所以返回-1,类比成false;表示我不想调整顺序
如果你想降序,那么o1比o2小不是我想要的;所以返回1,类比成true;表示我想调整顺序

案例

@Override
            public int compare(int[] o1,int[] o2){
                if(o1[0]==o2[0]){
                    return Integer.compare(o1[1],o2[1]);
//Integer.compare默认是从小到大排序
//o1[1]>o2[1]时返回1 表示要调整顺序
//o1[1]<o2[1]时返回-1 表示不需要调整顺序

                }
                return Integer.compare(o2[0],o1[0]);
}

标签:compare,Java,Object,o2,obj,排序,比较,o1
来源: https://www.cnblogs.com/rananie/p/15081281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有