java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别
對于JDK8而言,有三種實現(xiàn)對象比較的方法:
1、在需要比較的對象類中覆寫Object類的equals()方法;
2、需要比較的類繼承Comparable接口,然后在其類內(nèi)部實現(xiàn)compareTo()方法;
3、拋去需要被比較的類,在其外部自定義一個單獨的對象比較器,繼承自Comparator接口,實現(xiàn)compare()方法。
由于使用的排序方式的不同,具體選擇哪種方法來實現(xiàn)對象的比較也會有所不同。
第一種方法比較便于理解,復寫equals()方法一般用于自己實現(xiàn)的對象數(shù)組排序,已經(jīng)在我們上一篇文章
2.內(nèi)部比較器Compareable的用法
這種方式就是讓自己編寫的類繼承Comparable接口,并實現(xiàn)接口的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)時刻要統(tǒng)一比較對象,在這里就是BookCook
(2)在重寫的compareTo()方法中,需要特別注意的是,返回值的正負始終與this待比較對象保證同步,即當this值比指定對象大時,就返回正數(shù)1,小于時就返回負數(shù)-1,相等時就返回0.
3.外部比較器Comparator的用法
從JDK1.8開始出現(xiàn)了Comparator接口,它的出現(xiàn)解決了當需要在已經(jīng)開發(fā)好的代碼基礎上完善對象的比較功能時不想更改之前的代碼的問題。這種情況下,我們就需要單獨自定義一個對象比較器,繼承Comparator接口。當需要進行比較時,就new一個對象比較器。
以學生成績?yōu)槔?#xff0c;具體實現(xiàn)代碼如下:
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+",分數(shù):"+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一個自定義的比較器,以便其按照自定義比較器中的規(guī)則進行比較。
40 java.util.Arrays.sort(sts, new StudentComparator());
41 System.out.println(java.util.Arrays.toString(sts));
42 }
43 }
總結(jié)
以上是生活随笔為你收集整理的java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flowable画图教程_flowabl
- 下一篇: java no cache_java