最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Java中幾種常見(jiàn)的比較器的實(shí)現(xiàn)方法

 更新時(shí)間:2017年10月07日 10:02:09   作者:danmoqianhua  
下面小編就為大家?guī)?lái)一篇淺談Java中幾種常見(jiàn)的比較器的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在Java中經(jīng)常會(huì)涉及到對(duì)象數(shù)組的排序問(wèn)題,那么就涉及到對(duì)象之間的比較問(wèn)題。

通常對(duì)象之間的比較可以從兩個(gè)方面去看:

第一個(gè)方面:對(duì)象的地址是否一樣,也就是是否引用自同一個(gè)對(duì)象。這種方式可以直接使用“==“來(lái)完成。

第二個(gè)方面:以對(duì)象的某一個(gè)屬性的角度去比較。

從最新的JDK8而言,有三種實(shí)現(xiàn)對(duì)象比較的方法:

一、覆寫Object類的equals()方法;

二、繼承Comparable接口,并實(shí)現(xiàn)compareTo()方法;

三、定義一個(gè)單獨(dú)的對(duì)象比較器,繼承自Comparator接口,實(shí)現(xiàn)compare()方法。

由于使用的排序方式的不同,具體選擇哪種方法來(lái)實(shí)現(xiàn)對(duì)象的比較也會(huì)有所不同。

覆寫equals()方法,一般用于自己實(shí)現(xiàn)對(duì)象數(shù)組排序的情況,而對(duì)于要使用java內(nèi)置的排序算法時(shí),使用后面兩種方式都是可行的。

先來(lái)看第二種方式,這種方式就是讓自己編寫的類繼承Comparable接口,并實(shí)現(xiàn)compareTo()方法,這種情況下,在使用java.util.Arrays.sort()

方法時(shí),不用指定具體的比較器,sort()方法會(huì)使用對(duì)象自己的比較函數(shù)來(lái)完成對(duì)象的排序。

下面是一個(gè)具體的例子:

import java.util.Arrays;

class BookCook implements Comparable<BookCook>{
	private String title;
	private double price;
	public BookCook(String title,double price){
		this.title = title;
		this.price = price;
	}
	@Override
	public String toString() {
		return "書(shū)名:"+this.title+",價(jià)格:"+this.price;
	}
	@Override
	public int compareTo(BookCook o) {
		if(this.price > o.price){
			return 1;
		}else if(this.price < o.price){
			return -1;
		}else{
			return 0;
		}
	}
}

一般我們使用以上兩種方法就能夠滿足實(shí)際的開(kāi)發(fā)問(wèn)題。但是當(dāng)出現(xiàn)以下情況時(shí),就需要用到Comparator接口:

要在已經(jīng)開(kāi)發(fā)好的代碼的基礎(chǔ)上完善對(duì)象的比較功能時(shí),又不想更改之前的代碼,這種情況下,從JDK1.8之后出現(xiàn)了Comparator接口,是對(duì)這種情況的一個(gè)彌補(bǔ)。

這種情況下,我們需要單獨(dú)定義一個(gè)對(duì)象比較器,繼承Comparator接口,并實(shí)現(xiàn)compare()方法。示例代碼如下:

class Student {
	private String name;
	private double score;
	public Student(String name,double score){
		this.name = name;
		this.score = score;
	}
	public double getScore(){
		return this.score;
	}
	@Override
	public String toString() {
		return "姓名:"+this.name+",分?jǐn)?shù):"+this.score;
	}
	
}
class StudentComparator implements Comparator<Student> {
	@Override
	public int compare(Student o1,Student o2) {
		if(o1.getScore() > o2.getScore()){
			return 1;
		}else if(o1.getScore() < o2.getScore()){
			return -1;
		}else{
			return 0;
		}
	}
}
public class TestComparator {

	public static void main(String[] args) {
		
		Student[] sts = new Student[]{
				new Student("小戴",60),
				new Student("小王",90),
				new Student("老王",80),
				new Student("小萱",95)
		};
		
		java.util.Arrays.sort(sts, new StudentComparator());
		System.out.println(java.util.Arrays.toString(sts));
	}
}

以上三種情況,因具體情況的不同,選擇不同的方法解決實(shí)際的問(wèn)題。

這篇淺談Java中幾種常見(jiàn)的比較器的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • System.getProperty(user.dir)定位問(wèn)題解析

    System.getProperty(user.dir)定位問(wèn)題解析

    System.getProperty(user.dir) 獲取的是啟動(dòng)項(xiàng)目的容器位置,用IDEA是項(xiàng)目的根目錄,部署在tomcat上是tomcat的啟動(dòng)路徑,即tomcat/bin的位置,這篇文章主要介紹了System.getProperty(user.dir)定位問(wèn)題,需要的朋友可以參考下
    2023-05-05
  • SpringBoot整合Shiro實(shí)現(xiàn)權(quán)限控制的代碼實(shí)現(xiàn)

    SpringBoot整合Shiro實(shí)現(xiàn)權(quán)限控制的代碼實(shí)現(xiàn)

    Apache Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會(huì)話管理,今天通過(guò)本文給大家介紹SpringBoot整合Shiro實(shí)現(xiàn)權(quán)限控制的方法,感興趣的朋友一起看看吧
    2021-07-07
  • List集合按某個(gè)屬性或者字段進(jìn)行分組的操作

    List集合按某個(gè)屬性或者字段進(jìn)行分組的操作

    這篇文章主要介紹了List集合按某個(gè)屬性或者字段進(jìn)行分組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java Spring開(kāi)發(fā)環(huán)境搭建及簡(jiǎn)單入門示例教程

    Java Spring開(kāi)發(fā)環(huán)境搭建及簡(jiǎn)單入門示例教程

    這篇文章主要介紹了Java Spring開(kāi)發(fā)環(huán)境搭建及簡(jiǎn)單入門示例,結(jié)合實(shí)例形式分析了spring環(huán)境搭建、配置、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • java 橋模式(Bridge Pattern)詳解

    java 橋模式(Bridge Pattern)詳解

    這篇文章主要介紹了java 橋模式(Bridge Pattern)詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • SpringBoot中使用spring-retry 解決失敗重試調(diào)用

    SpringBoot中使用spring-retry 解決失敗重試調(diào)用

    本文主要介紹了SpringBoot中使用spring-retry 解決失敗重試調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 深入了解java NIO之Selector(選擇器)

    深入了解java NIO之Selector(選擇器)

    這篇文章主要介紹了java NIO之Selector(選擇器)的相關(guān)資料,文中講解非常詳細(xì),實(shí)例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • mybatis通過(guò)中間表實(shí)現(xiàn)一對(duì)多查詢功能

    mybatis通過(guò)中間表實(shí)現(xiàn)一對(duì)多查詢功能

    這篇文章主要介紹了mybatis通過(guò)中間表實(shí)現(xiàn)一對(duì)多查詢,通過(guò)一個(gè)學(xué)生的id查詢出該學(xué)生所學(xué)的所有科目,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過(guò)程

    SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過(guò)程

    這篇文章主要介紹了SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過(guò)程,對(duì)于Java后端來(lái)說(shuō)肯定實(shí)現(xiàn)定時(shí)功能肯定是使用到Spring封裝好的定時(shí)調(diào)度Scheduled
    2023-04-04

最新評(píng)論

金寨县| 威远县| 常熟市| 五原县| 嵩明县| 铁力市| 西乌珠穆沁旗| 疏附县| 鸡东县| 五莲县| 汉寿县| 徐汇区| 永泰县| 南安市| 南靖县| 桐梓县| 柞水县| 衡阳市| 兰坪| 安龙县| 仪陇县| 永吉县| 房山区| 三穗县| 铁力市| 九台市| 陕西省| 石屏县| 克山县| 花莲市| 南华县| 玉门市| 林口县| 通州市| 茶陵县| 乌拉特前旗| 屏东市| 阜康市| 镇安县| 务川| 乌什县|