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

网站关于我们的页面深圳建设局官网站

网站关于我们的页面,深圳建设局官网站,济南市做网站,重庆大型的网站建设目录 元素的比较 1.基本类型的比较 2.对象比较的问题 1.运行结果 2.疑问 3.原因 对象的比较 1.覆写基类的equals 2.基于Comparble接口类的比较 3.基于比较器比较 4.三种方式对比 元素的比较 1.基本类型的比较 在Java 中#xff0c;基本类型的对象可以直接比较大… 目录 元素的比较 1.基本类型的比较 2.对象比较的问题 1.运行结果 2.疑问 3.原因 对象的比较 1.覆写基类的equals  2.基于Comparble接口类的比较 3.基于比较器比较 4.三种方式对比  元素的比较 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.对象比较的问题 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指向的是同一个对象 } } 1.运行结果 c1、c2和c3分别是Card类型的引用变量上述代码在比较编译时 c1 c2 编译失败 c1 c2 编译成功 c1 c2 编译失败 2.疑问 从编译结果可以看出Java 中引用类型的变量不能直接按照 或者 方式进行比较。 那为什么可以比较 3.原因 因为对于用户实现自定义类型都默认继承自Object类而Object类中提供了equal方法而默认情况下调用的就是equal方法 但是该方法的比较规则是没有比较引用变量引用对象的内容而是直接比较引用变量的地址 但有些情况下该种比较就不符合题意。 下面代码Object中equal的实现 可以看到 直接比较的是两个引用变量的地址   // Object中equal的实现 可以看到 直接比较的是两个引用变量的地址 public boolean equals(Object obj) { return (this obj); } 对象的比较 有些情况下需要比较的是对象中的内容比如向优先级队列中插入某个对象时需要对按照对象中内容来调整课 堆那该如何处理呢 1.覆写基类的equals  public class Card { public int rank; // 数值 public String suit; // 花色 public Card(int rank, String suit) { this.rank rank; this.suit suit; } Override public 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只能按照相等进行比较不能按照大于、小于的方式进行比较。 2.基于Comparble接口类的比较 Comparble是JDK 提供的泛型的比较接口类源码实现具体如下 public interface ComparableE { // 返回值: // 0: 表示 this 指向的对象小于 o 指向的对象 // 0: 表示 this 指向的对象等于 o 指向的对象 // 0: 表示 this 指向的对象大于 o 指向的对象 int compareTo(E o); }  // 返回值:     // 0:  表示 this 指向的对象小于 o 指向的对象     // 0: 表示 this 指向的对象等于 o 指向的对象    // 0:  表示 this 指向的对象大于 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 是最小的 Override public 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.基于比较器比较 按照比较器方式进行比较具体步骤如下 用户自定义比较器类实现Comparator接口  public interface ComparatorT { // 返回值: // 0: 表示 o1 指向的对象小于 o2 指向的对象 // 0: 表示 o1 指向的对象等于 o2 指向的对象 // 0: 表示 o1 指向的对象等于 o2 指向的对象 int compare(T o1, T o2); } 注意区分Comparable和Comparator。  覆写Comparator中的compare方法                                              import j ava.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 是最小的 Override public 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 包中的泛型接口类使用时必须导入对应的包。 4.三种方式对比  覆写的方法                说明 Object.equals                因为所有类都是继承自 Object 的所以直接覆写即可不过只能比较相等与就否  Comparable.compareTo                需要手动实现接口侵入性比较强但一旦实现每次用该类都有顺序属于内部顺序 Comparator.compare                需要实现一个比较器对象对待比较类的侵入性弱但对算法代码实现侵入性强
http://www.pierceye.com/news/674632/

相关文章:

  • 江都区城乡建设局网站马局下载app下载安卓免费
  • 网站做后台kuler 网站
  • 北京建网站公司飞沐扬中信息网
  • 商河网站建设公司南县网站建设推荐
  • 湛江企业网站建站模板网站开发 平台
  • c做的网站app开发制作专业吗
  • 杭州做网站公司做网站的文章
  • 那里有制作网站公司做网站需要了解的内容
  • 网站防护怎么做企业网站建设的ppt
  • 凡科网的网站建设好用吗wordpress在线朗读
  • 闽侯县建设局网站营销网站seo推广费用
  • 长乐区住房和城乡建设局网站测网站打开的速度的网址
  • 手机网站产品展示模板wordpress评论改成微博
  • 后盾网原创实战网站建设教程做网站和编程序
  • 东莞整站优化推广公司找火速如何做网站连接
  • 做ppt的模板的网站想学服装设计怎么入门
  • 短视频网站如何做推广网站申请域名
  • 餐饮行业网站建设风格建网站费用
  • 北京网站建设与维护石家庄做淘宝网站
  • seo网站关键词优化费用linux wordpress 伪静态
  • 朋友做的网站图片不显示不出来的网站空间哪家公司的好
  • 外贸网站建设公司价格最全做暖暖网站
  • 手机网站建设代理商怎么自己开一个网站
  • 国内比较高端的设计网站如何通过html做网站
  • 做一个网站怎么赚钱网站建设方向
  • 岳阳网站建设哪里便宜连云港网站制作
  • 企业网站内容运营方案策划网络运营是什么意思
  • 深圳建网站信科南京医院网站建设
  • 新开最好的传奇网站js 网站跳转
  • 阿里巴巴国际站做2个网站有用网站制作是怎么学的