当前位置: 首页> 财经> 创投人物 > 网站服务器租用的_网页游戏排行榜前十名歌_怎么建立一个自己的网站_google关键词分析

网站服务器租用的_网页游戏排行榜前十名歌_怎么建立一个自己的网站_google关键词分析

时间:2025/7/9 3:40:36来源:https://blog.csdn.net/2401_85234841/article/details/142766914 浏览次数:0次
网站服务器租用的_网页游戏排行榜前十名歌_怎么建立一个自己的网站_google关键词分析

目录

1.元素的比较 

1.1基本类型的比较

1.2 对象的比较的问题

 2.对象的比较

2.1覆写基类的equals

2.2基于Comparable接口类的比较

2.3基于比较器比较

2.4三种比较方法的对比

3.集合框架中PriorityQueue的比较方式

4.使用PriorityQueue创建大小堆,解决TOPK问题

1.元素的比较 

1.1基本类型的比较

基本类型的对象可以直接比较大小

public class TestCompare {public static void main(String[] args) {int a = 10;int b = 20;System.out.println(a > b);System.out.println(a < b);System.out.println(a == b);char c1 = 'A';char c2 = 'B';System.out.println(c1 > c2);System.out.println(c1 < c2);System.out.println(c1 == c2);boolean b1 = true;boolean b2 = false;System.out.println(b1 == b2);System.out.println(b1 != b2);}
}
//false
//true
//false
//false
//true
//false
//false
//true
1.2 对象的比较的问题
class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}
}public class Text {public static void main(String[] args) {Card c1 = new Card(1, "♠");Card c2 = new Card(2, "♠");Card c3 = c1;
//        System.out.println(c1 > c2); // 编译报错System.out.println(c1 == c2); // 编译成功 ----> 打印false,因为c1和c2指向的是不同对象
//        System.out.println(c1 < c2); // 编译报错System.out.println(c1 == c3); // 编译成功 ----> 打印true,因为c1和c3指向的是同一个对象}
}

 2.对象的比较

2.1覆写基类的equals
public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if(obj == null) {return false;}
// 自己和自己比较if(this == obj) {return true;}
// obj不是Person的子类if(!(obj instanceof Person)) {return false;}Person person = (Person) obj;//向下转型,比较属性值return this.name.equals(person.name) && this.age == person.age;}
}

 equal只能按照相等进行比较,不能按照大于、小于的方式进行比较

2.2基于Comparable接口类的比较

Comparable是JDK提供的泛型的比较接口类,源码实现具体如下:

public interface Comparable<E> {// 返回值:// < 0: 表示 this 指向的对象小于 o 指向的对象// == 0: 表示 this 指向的对象等于 o 指向的对象// > 0: 表示 this 指向的对象大于 o 指向的对象int compareTo(E o);
}

对于用户自定义类型,如果要想按照大小与方式进行比较时:在定义类时,实现Comparble接口即可,然后在类中重写compareTo方法。

public class Card implements Comparable<Card> {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}// 根据数值比较,不管花色// 这里我们认为 null 是最小的@Overridepublic int compareTo(Card o) {if (o == null) {return 1;}return rank - o.rank;}public static void main(String[] args) {Card p = new Card(1, "♠");Card q = new Card(2, "♠");Card o = new Card(1, "♠");System.out.println(p.compareTo(o)); // == 0,表示牌相等System.out.println(p.compareTo(q)); // < 0,表示 p 比较小System.out.println(q.compareTo(p)); // > 0,表示 q 比较大}
}
//0
//-1
//1

Compareble是java.lang中的接口类,可以直接使用

2.3基于比较器比较

用户自定义比较器类,实现Comparator接口

public interface Comparator<T> {// 返回值:// < 0: 表示 o1 指向的对象小于 o2 指向的对象// == 0: 表示 o1 指向的对象等于 o2 指向的对象// > 0: 表示 o1 指向的对象大于 o2 指向的对象int compare(T o1, T o2);
}

覆写Comparator中的compare方法

import java.util.Comparator;class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}
}class CardComparator implements Comparator<Card> {// 根据数值比较,不管花色// 里我们认为 null 是最小的@Overridepublic int compare(Card o1, Card o2) {if (o1 == o2) {return 0;}if (o1 == null) {return -1;}if (o2 == null) {return 1;} return o1.rank - o2.rank;}public static void main(String[] args){Card p = new Card(1, "♠");Card q = new Card(2, "♠");Card o = new Card(1, "♠");
// 定义比较器对象CardComparator cmptor = new CardComparator();
// 使用比较器对象进行比较System.out.println(cmptor.compare(p, o)); // == 0,表示牌相等System.out.println(cmptor.compare(p, q)); // < 0,表示 p 比较小System.out.println(cmptor.compare(q, p)); // > 0,表示 q 比较大}
}
//0
//-1
//1

Comparator是java.util 包中的泛型接口类,使用时必须导入对应的包 

2.4三种比较方法的对比
覆写的方法说明
Object.equals因为所有类都是继承自 Object 的,所以直接覆写即可,不过只能比较相等与
Comparable.compareTo需要手动实现接口,侵入性比较强,但一旦实现,每次用该类都有顺序,属于
内部顺序
Comparator.compare需要实现一个比较器对象,对待比较类的侵入性弱,但对算法代码实现侵入性

3.集合框架中PriorityQueue的比较方式

集合框架中的PriorityQueue底层使用堆结构,因此其内部的元素必须要能够比大小PriorityQueue采用了:Comparble和Comparator两种方式:
1. Comparble是默认的内部比较方式,如果用户插入自定义类型对象时,该类对象必须要实现Comparble接口,并覆写compareTo方法
2. 用户也可以选择使用比较器对象,如果用户插入自定义类型对象时,必须要提供一个比较器类,让该类实现Comparator接口并覆写compare方法。

4.使用PriorityQueue创建大小堆,解决TOPK问题

import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;//使用比较器创建小根堆
class LessIntComp implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}
}//使用比较器创建大根堆
class GreaterIntComp implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}
}public class Text {//求最小的K个数,通过比较器创建大根堆public static int[] smallestK(int[] array, int k) {if(k <= 0) {return new int[k];}GreaterIntComp greaterCmp = new GreaterIntComp();PriorityQueue<Integer> maxHeap = new PriorityQueue<>(greaterCmp);//先将前K个元素,创建大根堆for(int i = 0; i < k; i++) {maxHeap.offer(array[i]);}//从第K+1个元素开始,每次和堆顶元素比较for (int i = k; i < array.length; i++) {int top = maxHeap.peek();if (array[i] < top) {maxHeap.poll();maxHeap.offer(array[i]);}}//取出前K个int[] ret = new int[k];for (int i = 0; i < k; i++) {int val = maxHeap.poll();ret[i] = val;}return ret;}public static void main(String[] args) {int[] array = {4,1,9,2,8,0,7,3,6,5};int[] ret = smallestK(array,3);System.out.println(Arrays.toString(ret));}
}
//[2, 1, 0]
关键字:网站服务器租用的_网页游戏排行榜前十名歌_怎么建立一个自己的网站_google关键词分析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: