Comparator比较器介绍、优先级队列PriorityQueue

您所在的位置:网站首页 compare的比较级对手 Comparator比较器介绍、优先级队列PriorityQueue

Comparator比较器介绍、优先级队列PriorityQueue

2024-07-15 09:17| 来源: 网络整理| 查看: 265

比较器、优先级队列 一:比较器的概念二:Comparable与Compartor的区别三:求数组中第k大的元素

一:比较器的概念

比较器的实质就是重载比较运算符

说到排序了,简单的说就是两个对象之间比较大小,那么在JAVA中提供了两种比较实现的方式,一种是比较死板的采用java.lang.Comparable接口去实现,一种是灵活的当我需要做排序的时候在去选择的java.util.Comparator接口完成。 Comparator这个接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,那么比较的方法就是: 任何比较器: compare方法里,遵循一个统一的规范: 返回负数的时候,认为第一个参数应该排在前面 返回正数的时候,认为第二个参数应该排在前面 返回0的时候,认为无所谓谁放前面

Arrays 该类包含用于操作数组的各种方法(如排序和搜索)。

public static class Student { public String name; public int id; public int age; public Student(String name, int id, int age) { this.name = name; this.id = id; this.age = age; } } public static class IdShengAgeJiangOrder implements Comparator { // 根据id从小到大,但是如果id一样,按照年龄从大到小 @Override public int compare(Student o1, Student o2) { return o1.id != o2.id ? (o1.id - o2.id) : (o2.age - o1.age); } } Arrays.sort(students, new IdShengAgeJiangOrder()); 二:Comparable与Compartor的区别

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

当前对象this与指定对象t比较“大小”,如果当前对象this大于指定对象t,则返回正整数,如果当前对象this小于指定对象t,则返回负整数,如果当前对象this等于指定对象t,则返回零。 在这里插入图片描述 在这里插入图片描述

Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

三:求数组中第k大的元素

PriorityQueue:优先级队列(Java语言自身提供的堆结构)。底层就是堆结构,默认是小根堆。

Queue heap = new PriorityQueue(new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); int[] arr = new int[]{2, 4, 1, 5, 7, 0}; for (int i = 0; i 0) { heap.poll(); } System.out.println(heap.peek()); //4

具体流程:

入队: 在这里插入图片描述 出队: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3