Java 中的 Comparator 比较器函数

首页 / Java入门教程 / Java 中的 Comparator 比较器函数

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.comhttps://www.learnfk.com/java/java-using-comparator.html

来源:LearnFk无涯教程网

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

面试现场 -〔白海飞〕

许式伟的架构课 -〔许式伟〕

零基础学Java -〔臧萌〕

深度学习推荐系统实战 -〔王喆〕

Kubernetes入门实战课 -〔罗剑锋〕

商业思维案例笔记 -〔曹雄峰〕

Dubbo源码剖析与实战 -〔何辉〕

大型Android系统重构实战 -〔黄俊彬〕

AI大模型企业应用实战 -〔蔡超〕

好记忆不如烂笔头。留下您的足迹吧 :)