日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别

發布時間:2025/5/22 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于JDK8而言,有三種實現對象比較的方法:

1、在需要比較的對象類中覆寫Object類的equals()方法;

2、需要比較的類繼承Comparable接口,然后在其類內部實現compareTo()方法;

3、拋去需要被比較的類,在其外部自定義一個單獨的對象比較器,繼承自Comparator接口,實現compare()方法。

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

第一種方法比較便于理解,復寫equals()方法一般用于自己實現的對象數組排序,已經在我們上一篇文章

2.內部比較器Compareable的用法

這種方式就是讓自己編寫的類繼承Comparable接口,并實現接口的compareTo()方法,這種情況下,在使用java.util.Arrays.sort()方法時不用指定具體的比較器。

以書店的圖書為例,具體實例代碼如下:

1 import java.util.Arrays;

2

3 class BookCook implements Comparable{

4 private String title;

5 private double price;

6 public BookCook(String title,double price){

7 this.title = title;

8 this.price = price;

9 }

10 @Override

11 public String toString() {

12 return "書名:"+this.title+",價格:"+this.price;

13 }

14 @Override

15 public int compareTo(BookCook o) {

16 if(this.price > o.price){

17 return 1;

18 }else if(this.price < o.price){

19 return -1;

20 }else{

21 return 0;

22 }

23 }

24 }

在寫代碼時要注意兩點:

(1)時刻要統一比較對象,在這里就是BookCook

(2)在重寫的compareTo()方法中,需要特別注意的是,返回值的正負始終與this待比較對象保證同步,即當this值比指定對象大時,就返回正數1,小于時就返回負數-1,相等時就返回0.

3.外部比較器Comparator的用法

從JDK1.8開始出現了Comparator接口,它的出現解決了當需要在已經開發好的代碼基礎上完善對象的比較功能時不想更改之前的代碼的問題。這種情況下,我們就需要單獨自定義一個對象比較器,繼承Comparator接口。當需要進行比較時,就new一個對象比較器。

以學生成績為例,具體實現代碼如下:

1 class Student {

2 private String name;

3 private double score;

4 public Student(String name,double score){

5 this.name = name;

6 this.score = score;

7 }

8 public double getScore(){

9 return this.score;

10 }

11 @Override

12 public String toString() {

13 return "姓名:"+this.name+",分數:"+this.score;

14 }

15

16 }

//自定義對象比較器

17 class StudentComparator implements Comparator {

18 @Override

19 public int compare(Student o1,Student o2) {

20 if(o1.getScore() > o2.getScore()){

21 return 1;

22 }else if(o1.getScore() < o2.getScore()){

23 return -1;

24 }else{

25 return 0;

26 }

27 }

28 }

29 public class TestComparator {

30

31 public static void main(String[] args) {

32

33 Student[] sts = new Student[]{

34 new Student("小戴",60),

35 new Student("小王",90),

36 new Student("老王",80),

37 new Student("小萱",95)

38 };

39 //當需要比較功能時,需要在待比較對象后new一個自定義的比較器,以便其按照自定義比較器中的規則進行比較。

40 java.util.Arrays.sort(sts, new StudentComparator());

41 System.out.println(java.util.Arrays.toString(sts));

42 }

43 }

總結

以上是生活随笔為你收集整理的java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。