当前位置: 首页 > news >正文

什么网站权重高网站开发专员岗位职责

什么网站权重高,网站开发专员岗位职责,成都网站设计报告书,温州好的网站推广Java中对象的比较 1. PriorityQueue中插入对象2. 元素的比较2.1 基本类型的比较2.2 对象比较的问题 3. 对象的比较3.1 覆写基类的equals3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 4. 集合框架中PriorityQueue的比较方式5. 使用PriorityQueue创建大小堆… Java中对象的比较 1. PriorityQueue中插入对象2. 元素的比较2.1 基本类型的比较2.2 对象比较的问题 3. 对象的比较3.1 覆写基类的equals3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 4. 集合框架中PriorityQueue的比较方式5. 使用PriorityQueue创建大小堆解决TOPK问题 1. PriorityQueue中插入对象 上个博客我们讲了优先级队列优先级队列在插入元素时有个要求插入的元素不能是null或者元素之间必须要能够进行比较为了简单起见我们只是插入了Integer类型那优先级队列中能否插入自定义类型对象呢 class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank rank;this.suit suit;} } public class TestPriorityQueue {public static void TestPriorityQueue(){PriorityQueueCard p new PriorityQueue();p.offer(new Card(1, ♠));p.offer(new Card(2, ♠));}public static void main(String[] args) {TestPriorityQueue();} }优先级队列底层使用堆而向堆中插入元素时为了满足堆的性质必须要进行元素的比较而此时Card是没有办法直接进行比较的因此抛出异常。 2. 元素的比较 2.1 基本类型的比较 在Java中基本类型的对象可以直接比较大小。 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);} }2.2 对象比较的问题 class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank rank;this.suit suit;} }public class TestPriorityQueue {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指向的是同一个对象} }c1、c2和c3分别是Card类型的引用变量上述代码在比较编译时 c1 c2 编译失败 c1 c2 编译成功 c1 c2 编译失败 从编译结果可以看出Java中引用类型的变量不能直接按照 或者 方式进行比较。 那为什么可以比较 因为对于用户实现自定义类型都默认继承自Object类而Object类中提供了equal方法而默认情况下调用的就是equal方法但是该方法的比较规则是没有比较引用变量引用对象的内容而是直接比较引用变量的地址但有些情况下该种比较就不符合题意。 // Object中equal的实现可以看到直接比较的是两个引用变量的地址 public boolean equals(Object obj) { return (this obj); } 3. 对象的比较 有些情况下需要比较的是对象中的内容比如向优先级队列中插入某个对象时需要对按照对象中内容来调整堆那该如何处理呢 3.1 覆写基类的equals public class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank rank;this.suit suit;}Overridepublic boolean equals(Object o) {// 自己和自己比较if (this o) {return true;}// o如果是null对象或者o不是Card的子类if (o null || !(o instanceof Card)) {return false;}// 注意基本类型可以直接比较但引用类型最好调用其equal方法Card c (Card)o;return rank c.rank suit.equals(c.suit);} }注意 一般覆写 equals 的套路就是上面演示的 如果指向同一个对象返回 true如果传入的为 null返回 false如果传入的对象类型不是 Card返回 false按照类的实现目标完成比较例如这里只要花色和数值一样就认为是相同的牌注意下调用其他引用类型的比较也需要 equals例如这里的 suit 的比较 覆写基类equal的方式虽然可以比较但缺陷是equal只能按照相等进行比较不能按照大于、小于的方式进行 比较。 3.2 基于Comparble接口类的比较 Comparble是JDK提供的泛型的比较接口类源码实现具体如下 public interface ComparableE { // 返回值: // 0: 表示 this 指向的对象小于 o 指向的对象 // 0: 表示 this 指向的对象等于 o 指向的对象 // 0: 表示 this 指向的对象大于 o 指向的对象 int compareTo(E o); }对用用户自定义类型如果要想按照大小与方式进行比较时在定义类时实现Comparble接口即可然后在类 中重写compareTo方法。 public class Card implements ComparableCard {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 比较大} }Compareble是java.lang中的接口类可以直接使用。 3.3 基于比较器比较 按照比较器方式进行比较具体步骤如下 用户自定义比较器类实现Comparator接口 public interface ComparatorT {// 返回值:// 0: 表示 o1 指向的对象小于 o2 指向的对象// 0: 表示 o1 指向的对象等于 o2 指向的对象// 0: 表示 o1 指向的对象等于 o2 指向的对象int compare(T o1, T o2); }注意区分Comparable和Comparator。 覆写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 ComparatorCard {// 根据数值比较不管花色// 这里我们认为 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 比较大 } }注意Comparator是java.util 包中的泛型接口类使用时必须导入对应的包 3.4 三种方式对比 4. 集合框架中PriorityQueue的比较方式 集合框架中的PriorityQueue底层使用堆结构因此其内部的元素必须要能够比大小PriorityQueue采用了 Comparble和Comparator两种方式。 Comparble是默认的内部比较方式如果用户插入自定义类型对象时该类对象必须要实现Comparble接 口并覆写compareTo方法用户也可以选择使用比较器对象如果用户插入自定义类型对象时必须要提供一个比较器类让该类实现 Comparator接口并覆写compare方法。 5. 使用PriorityQueue创建大小堆解决TOPK问题 //使用比较器创建小根堆 class LessIntComp implements ComparatorInteger{ Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }//使用比较器创建大根堆 class GreaterIntComp implements ComparatorInteger{ Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }public class TestDemoE {//求最小的K个数通过比较器创建大根堆public static int[] smallestK(int[] array, int k) {if(k 0) {return new int[k];}GreaterIntComp greaterCmp new GreaterIntComp();PriorityQueueInteger maxHeap new PriorityQueue(greaterCmp);//先将前K个元素创建大根堆for(int i 0; i k; i) {maxHeap.offer(array[i]);}//从第K1个元素开始每次和堆顶元素比较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));} }
http://www.dnsts.com.cn/news/19533.html

相关文章:

  • 做ppt图片用的网站昆山市建设监察大队官方网站
  • 优秀网站制作定制简创网站建设费用
  • 35互联做网站多少钱湖南网站建设开发公司
  • 律师在哪个网站做wordpress用户上传
  • 素马网站建设服务收费标准排名优化公司哪家好
  • 促销礼品网站建设网站建设价格比较
  • 网站前端设计软件沈阳正规的男科医院
  • 做vi设计的国外网站精品课程网站建设摘要
  • 优化网站标题和描述的方法app注册推广平台
  • 公司网站建设的不足西安网站开发公司
  • 学外贸英语的网站男女做暧视频网站免费
  • 万网如何建网站搜索关键词排名优化技术
  • 网站推广一站式服务网站建设方案免费下载
  • 清远做网站wordpress注册登录修改密码
  • 建设河南分行网站wordpress微信朋友圈
  • 网站建设布局怎么做网站规划
  • 中国门户网站排行vi设计方案包括
  • 怎么做告白网站吉林公司网站建设
  • 网站开发框架织梦建设网站全过程
  • 网站用户体验诊断自己的网站怎么做团购
  • 哪家公司做的网站好营销网站模板下载
  • 吉林网站建设哪家好电子商务网站的建设与规划书
  • 网站 当前时间 代码当当网电子商务网站建设
  • 公司网站开发策划企业团建公司
  • html5移动网站开发成都网页
  • 外贸led网站建设宁波制作网站软件
  • 东莞飞天网站设计公司wordpress收发邮件
  • 移动网站设计与制作怎么自己做直播网站
  • 简述电子商务网站开发的基本流程wordpress 局域网
  • 网站限定域名自己建设网站