首页 > 编程语言 >无涯教程-Java - Comparator 比较器函数

无涯教程-Java - Comparator 比较器函数

时间:2023-12-19 16:32:02浏览次数:41  
标签:Java Comparator list 无涯 Dog new 排序 public

TreeSet和TreeMap都按排序顺序存储元素。但是,比较器(Comparator)精确地定义了排序顺序的含义。

比较器(Comparator)接口定义了两个方法:compare()和equals()。

Compare方法

int compare(Object obj1,Object obj2)

obj1和obj2是要比较的对象。如果对象相等,则此方法返回零。如果obj1大于obj2,则返回正值。否则,将返回负值。

Equals方法

此处显示的equals()方法测试对象是否等于调用比较器-

boolean equals(Object obj)

obj是要测试是否相等的对象。如果obj和调用对象都是Comparator对象,并且使用相同的顺序,则该方法返回true。否则,它返回false。

Comparator示例

import java.util.*;

class Dog implements Comparator<Dog>, Comparable<Dog> {
   private String name;
   private int age;
   Dog() {
   }

   Dog(String n, int a) {
      name=n;
      age=a;
   }

   public String getDogName() {
      return name;
   }

   public int getDogAge() {
      return age;
   }

   //覆盖 compareTo 方法
   public int compareTo(Dog d) {
      return (this.name).compareTo(d.name);
   }

   //覆盖比较方法对年龄进行排序
   public int compare(Dog d, Dog d1) {
      return d.age - d1.age;
   }
}

public class Example {

   public static void main(String args[]) {
      //获取一个 Dog 对象列表
      List<Dog> list=new ArrayList<Dog>();

      list.add(new Dog("Shaggy", 3));
      list.add(new Dog("Lacy", 2));
      list.add(new Dog("Roger", 10));
      list.add(new Dog("Tommy", 4));
      list.add(new Dog("Tammy", 1));
      Collections.sort(list);   //对数组列表进行排序

      for(Dog a: list)   //打印名称的排序列表
         System.out.print(a.getDogName() + ", ");

      //使用比较器对数组列表进行排序
      Collections.sort(list, new Dog());
      System.out.println(" ");
      
      for(Dog a: list)   //打印年龄的排序列表
         System.out.print(a.getDogName() +"  : "+ a.getDogAge() + ", ");
   }
}

这将产生以下输出-

Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy  : 1, Lacy  : 2, Shaggy  : 3, Tommy  : 4, Roger  : 10,

注意-Arrays类的排序与Collections相同。

参考链接

https://www.learnfk.com/java/java-using-comparator.html

标签:Java,Comparator,list,无涯,Dog,new,排序,public
From: https://blog.51cto.com/u_14033984/8890837

相关文章

  • 启动微服务报错:java.lang.IllegalStateException: Service id not legal hostname (se
    Order微服务通过opneFeign调用storage和account时报错原因分析:服务名称不能有下划线,可以使用中划线,Springcloud无法识别下划线,将下划线改为中划线即可注意:这个改了之后,你在进行远程调用的时候,接口对应的方法接口也需要相应改变【分布式开发,一个微服务模块修改了,很可能......
  • 秦疆的Java课程笔记:76 面向对象 N中内部类
    内部类就是在一个类的内部再定义一个类。比如,在A类中定义一个B类,那么B类相对于A类来说就是内部类;相反,A类相对于B类就是外部类。秦疆老师声明,这小节主要是长长见识,实际编程作业中不推荐下列写法。成员内部类//先写一个有内部类的类=============================publiccl......
  • 无涯教程-Java - IdentityHashMap 类函数
    以下是IdentityHashMap支持的构造函数的列表。Sr.No.Constructor&Remark1IdentityHashMap()该构造函数构造一个新的,空的哈希,其默认预期最大大小为(21)。2IdentityHashMap(intExpectedMaxSize)此构造函数使用指定的预期最大大小构造一个新的空IdentityHashMap。......
  • java的8种异步实现方式
    异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过异步实现的场景。异步的八种实现方式线程ThreadFuture异步框架CompletableFutureSpring注解@A......
  • Java http请求json数据
    publicstaticStringsendJson(Stringurl,Stringjson){StringreturnValue="调用接口失败";CloseableHttpClienthttpClient=HttpClients.createDefault();ResponseHandler<String>responseHandler=newBasicResponseHandler();try{......
  • 数据库类型和java中类型不一样的处理
    在数据库中我们定义的是字符串类型,但是根据需求我们需要存一个数组对象这个时候我们需要进行处理将java中的该变量都处理成数组,为了和数据库进行对应,我们需要在实体类添加一个东西  当有了这个的时候我们就可以和数据库进行联系啦 还需要对相应的字段进行处理 ......
  • 什么是 JavaScript 闭包?
    什么是JavaScript闭包?在JavaScript中,闭包是指一个函数能够访问在它外部定义的变量。这些变量通常被称为“自由变量”,因为它们不是该函数的局部变量,也不是该函数的参数。闭包可以在函数内部创建,也可以在函数外部创建。JavaScript中的每个函数都是一个闭包,因为它们都能够访问......
  • java基础语法之二维数组2
    一:概述在相关二维数组的上一边博文中,介绍了二维数组的定义,及其定义格式和初始化的相关知识点。在这篇文章中将说明二维数组的遍历其内存图。二:具体说明<1>二维数组的遍历在实现的过程中,我们在二维数组中使用了循环嵌套:①循环嵌套:循环语句中嵌套循环语句②通过外层循环可以得到......
  • 无涯教程-Java - WeakHashMap 类函数
    WeakHashMap是Map接口的实现,该接口仅存储对其键的弱引用,当不再在WeakHashMap之外引用键值对时,仅存储弱引用将允许对键值对进行垃圾回收。以下是WeakHashMap类支持的构造函数的列表。Sr.No.Constructor&Remark1WeakHashMap()此构造函数使用默认的初始容量(16)和默认的加......
  • 无涯教程-Java - TreeMap 类函数
    TreeMap类通过使用树来实现Map接口。TreeMap提供了一种有效的方式来按排序顺序存储键/值对,并允许快速检索。以下是TreeMap类支持的构造函数的列表。Sr.No.Constructors&Remark1TreeMap()此构造函数构造一个空的树Map,将使用其键的自然顺序对其进行排序。2TreeMap(......