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

做网站常用的小语种有哪些如何推广网址链接

做网站常用的小语种有哪些,如何推广网址链接,赣州建设网站,网页制作工具中可进行网页内容定位产生非对称效果的是目录 元素的比较 1.基本类型的比较 2.对象比较的问题 1.运行结果 2.疑问 3.原因 对象的比较 1.覆写基类的equals 2.基于Comparble接口类的比较 3.基于比较器比较 4.三种方式对比 元素的比较 1.基本类型的比较 在Java 中,基本类型的对象可以直接比较大…

 

目录

元素的比较

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 的套路就是上面演示的

  1. 如果指向同一个对象,返回 true 
  2. 如果传入的为 null ,返回 false 
  3. 如果传入的对象类型不是 Card ,返回 false 
  4. 按照类的实现目标完成比较,例如这里只要花色和数值一样,就认为是相同的牌
  5. 注意下调用其他引用类型的比较也需要 equals ,例如这里的 suit 的比较 

覆写基类equal的方式虽然可以比较,但缺陷是:equal只能按照相等进行比较,不能按照大于、小于的方式进行比较。

2.基于Comparble接口类的比较

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

public interface Comparable<E> { // 返回值: // < 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 Comparable<Card> { 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 Comparator<T> { // 返回值: // < 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 Comparator<Card> { // 根据数值比较 ,不管花色 // 这里我们认为  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.mmbaike.com/news/94933.html

相关文章:

  • 图片网站建站系统品牌推广的三个阶段
  • 网站制作怎么学网站优化外包推荐
  • 安徽常青建设集团网站专业的网站优化公司
  • 上海中国建设银行招聘信息网站湖南正规seo优化报价
  • mobi手机网站建设百度一下生活更好
  • 视频网站怎么做统计表自己代理一款手游需要多少钱
  • 做信息图的网站北京网站优化步
  • 长沙网站 建设推广世云网络百度网盘官网入口
  • 网站建设方案书阿里云郑州seo优化外包热狗网
  • dedecms公司网站怎么做app推广是什么工作
  • 新网站怎么做seo 风享如何制作公司网页
  • 网站查询系统怎么做网址收录
  • 做外贸没有网站需要什么条件什么是seo推广
  • 温州龙湾区新冠疫情最新seo文章优化技巧
  • 做网站需要报备什么条件seo推广需要多少钱
  • 政府网站建设赏析深圳seo
  • 建大型网站公司网站综合查询工具
  • 重庆市造价信息网官网上海关键词优化外包
  • 聊城建设委员会官方网站品牌推广策划营销策划
  • 外贸网站设计案例百度客服
  • 固镇网站建设个人网站设计方案
  • 深圳分销网站制作百度热搜榜怎么打开
  • 网站作用seo关键词库
  • web开发培训哪家好优化大师是什么意思
  • 网站建设计划 文库怎么创建网站链接
  • 国外优秀平面设计网站指数工具
  • 怎么进入公众号百度seo如何优化
  • 做网站能传电影网站多少钱360推广
  • 义乌网站开发seo计费系统开发
  • 网页设计欣赏和解析网站快速优化排名推荐