wordpress移动显示,网站关键词优化教程,wordpress 输入 摘要,什么是体验营销看到这句话的时候证明#xff1a;此刻你我都在努力
加油陌生人 个人主页#xff1a;Gu Gu Study 专栏#xff1a;用Java学习数据结构系列 喜欢的一句话#xff1a; 常常会回顾努力的自己#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者#xff…看到这句话的时候证明此刻你我都在努力
加油陌生人 个人主页Gu Gu Study 专栏用Java学习数据结构系列 喜欢的一句话 常常会回顾努力的自己所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者小闭 前言
上一篇文章已经给大家大致了解了一下Priority Queue以及它的底层实现---堆 但是其实大家可以发现我们上一篇文章的对象是 int 类型所以我们进行向上调整和向下调整时我可以使用 “” “ ” “ ” 进行比较他们的大小进行比较调整但是如果我们的Priority Queue 里储存的是一个对象呢那么这时就涉及到对象的比较了。那么对象如何进行比较就往下看看这篇文章吧。 对象比较的三种方式
对象的比较我们现在主要有三种方式 重写equals 实现compa方法rable接口并改写重写其compareTo方法加入比较器我们自己定义一个比较器类并实现comparor接口重写compare方法比较时创建比较器对象进行调用其compare方法即可。
那么下面我们就一一给大家演示一遍 重写equals
如下代码:
我们根据我们自己的想法决定我们比较员工Worker的标准为工龄workAge只要工龄相等我们就直接判定其为相同的那么我们就可以像下面这样子重写equals方法。我们也可以加上其它比较元素。
public class Worker {String name;int age;int workAge;Overridepublic boolean equals(Object o) {if (this o) return true;if (o null ) return false;Worker worker (Worker) o;return workAge worker.workAge;}public static void main(String[] args) {Worker tnew Worker();Worker t1new Worker();Worker t2new Worker();t.age19;t.nameaaa;t.workAge3;t1.age19;t1.nameaaa;t1.workAge2;t2.age22;t2.nameccc;t2.workAge3;System.out.println(t.equals(t1));System.out.println(t.equals(t2));}} 实现comparable接口
正如上面所说那么我们首先要我们需要比较的对象实现comparable接口在重写compareTo方法那么下面就演示一下
compareTo方法的返回值是int类型其中返回值大于0则比较结果为大于小于0则比较结果为小于等于0则说明比较的两个对象相等。
public class Worker implements Comparable {String name;int age;int workAge;Overridepublic int compareTo(Object o) {if (this o) return 0;if (o null ) return -1;Worker worker (Worker) o;return workAge - worker.workAge;}public static void main(String[] args) {Worker tnew Worker();Worker t1new Worker();Worker t2new Worker();t.age19;t.nameaaa;t.workAge3;t1.age19;t1.nameaaa;t1.workAge2;t2.age22;t2.nameccc;t2.workAge3;if(t.compareTo(t1)0){System.out.println(大于);}else if(t.compareTo(t1)0){System.out.println(小于);}else {System.out.println(相等);}}} 加入比较器
如下代码我们定义了一个比较器的类ComWorker然后重写了compare方法然后在需要比较时实例化一个比较器对象然后调用其compare方法即可。
public class Worker {String name;int age;int workAge;public static void main(String[] args) {ComWorker cnew ComWorker();Worker tnew Worker();Worker t1new Worker();Worker t2new Worker();t.age19;t.nameaaa;t.workAge3;t1.age19;t1.nameaaa;t1.workAge2;t2.age22;t2.nameccc;t2.workAge3;int n c.compare(t,t1);if(n0){System.out.println(大于);}else if(n0){System.out.println(小于);}else {System.out.println(相等);}}}class ComWorker implements Comparator {Overridepublic int compare(Object o1, Object o2) {if (o1o2) return 0;Worker worke1 (Worker) o1;Worker worker2 (Worker) o2;return worke1.workAge-worker2.workAge;}} equals 方法 用途用于检查两个对象是否相等。场景当你需要判断两个对象是否代表相同的数据或状态时比如检查两个字符串是否包含相同的字符序列。实现通常重写Object类的equals方法来定义对象相等的逻辑。因为所有类都是继承自 Object 的所以直接覆写即可不过只能比较相等与否 Comparable 接口 用途用于定义对象的自然排序规则。场景当你的对象需要按照某种自然顺序如数字的大小、字符串的字典顺序进行排序时比如在集合类如TreeSet或Arrays.sort()中使用。实现实现Comparable接口并重写compareTo方法。需要手动实现接口侵入性比较强但一旦实现每次用该类都有顺序属于 内部顺序
Comparator 接口 用途用于定义对象的自定义排序规则。场景当你需要按照非自然顺序比如根据对象的某个属性对对象进行排序时比如在Collections.sort()或Stream API中使用。实现实现Comparator接口并定义compare方法。需要实现一个比较器对象对待比较类的侵入性弱但对算法代码实现侵入性 在Priority Queue中的形式
集合框架中的PriorityQueue底层使用堆结构因此其内部的元素必须要能够比大小PriorityQueue采用了 Comparble和Comparator两种方式。
Comparble是默认的内部比较方式如果用户插入自定义类型对象时该类对象必须要实现Comparble接口并覆写compareTo方法用户也可以选择使用比较器对象如果用户插入自定义类型对象时必须要提供一个比较器类让该类实现Comparator接口并覆写compare方法。