欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

通常對象之間的比較可以從兩個方面去看:

第一個方面:對象的地址是否一樣,也就是是否引用自同一個對象。這種方式可以直接使用“==“來完成。

第二個方面:以對象的某一個屬性的角度去比較。

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

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

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

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

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

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

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

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

下面是一個具體的例子:

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 "書名:"+this.title+",價格:"+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;
		}
	}
}

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

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

這種情況下,我們需要單獨定義一個對象比較器,繼承Comparator接口,并實現(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+",分數(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));
	}
}

以上三種情況,因具體情況的不同,選擇不同的方法解決實際的問題。

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

相關文章

  • Java虛擬機之對象創(chuàng)建過程與類加載機制及雙親委派模型

    Java虛擬機之對象創(chuàng)建過程與類加載機制及雙親委派模型

    這篇文章主要給大家介紹了關于Java虛擬機之對象創(chuàng)建過程與類加載機制及雙親委派模型的相關資料,本文通過示例代碼以及圖文介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11
  • springboot執(zhí)行延時任務之DelayQueue的使用詳解

    springboot執(zhí)行延時任務之DelayQueue的使用詳解

    DelayQueue是一個無界阻塞隊列,只有在延遲期滿時,才能從中提取元素。這篇文章主要介紹了springboot執(zhí)行延時任務-DelayQueue的使用,需要的朋友可以參考下
    2019-12-12
  • java中VO的使用解析

    java中VO的使用解析

    這篇文章主要介紹了java中VO的使用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 23種設計模式(11)java策略模式

    23種設計模式(11)java策略模式

    這篇文章主要為大家詳細介紹了23種設計模式之java策略模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • springboot中redis的緩存穿透問題實現(xiàn)

    springboot中redis的緩存穿透問題實現(xiàn)

    這篇文章主要介紹了springboot中redis的緩存穿透問題實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • JSONObject與JSONArray的使用

    JSONObject與JSONArray的使用

    這篇文章主要介紹了JSONObject與JSONArray的使用 的相關資料,需要的朋友可以參考下
    2016-06-06
  • java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實現(xiàn)示例

    java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實現(xiàn)示例

    在處理大量數(shù)據(jù)時,直接從數(shù)據(jù)庫一次性讀取所有數(shù)據(jù)可能會導致內(nèi)存溢出或者性能下降,本文就來介紹一下java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實現(xiàn)示例,感興趣的可以了解一下
    2024-01-01
  • SpringBoot框架配置文件路徑設置方式

    SpringBoot框架配置文件路徑設置方式

    這篇文章主要介紹了SpringBoot框架配置文件路徑設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring中@Transactional用法詳細介紹

    Spring中@Transactional用法詳細介紹

    這篇文章主要介紹了Spring中@Transactional用法詳細介紹的相關資料,需要的朋友可以參考下
    2017-02-02
  • Spring Boot之AOP配自定義注解的最佳實踐過程

    Spring Boot之AOP配自定義注解的最佳實踐過程

    這篇文章主要給大家介紹了關于Spring Boot之AOP配自定義注解的最佳實踐過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11

最新評論