Java中Comparable和Comparator的區別
阿新 • • 發佈:2020-09-17
Comparable:
Comparable
定義在java.lang
包裡,意味著可以被比較的能力,因此某個類想要可以被排序,被比較大小,需要實現這個介面
public interface Comparable<T> {
public int compareTo(T o);
}
Comparable測試程式碼:
- 1、實現Comparable介面的Girl類
package comparabletest; public class Girl implements Comparable<Girl>{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Girl(String name, int age) { this.name = name; this.age = age; } /** * 重寫方法,自定義排序的策略 * @param o * @return */ @Override public int compareTo(Girl o) { return this.age -o.age; } @Override public String toString() { return "Girl{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
- 2、測試類
package comparabletest;
public class TestGirl {
public static void main(String[] args) {
Girl girl1 = new Girl("A", 20);
Girl girl2 = new Girl("B", 15);
System.out.println(girl1.compareTo(girl2));
}
}
Comparator:
Comparator
定義在java.util
包中,代表著一個角色,這個角色的功能是對傳入的兩個元素進行大小的比較,並且返回結果.
public interface Comparator<T> {
int compare(T o1, T o2);
}
Comparator 測試程式碼:
- 1、正常的Girl類
package comparatortest; public class Girl { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Girl(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Girl [name=" + name + ", age=" + age + "]"; } }
- 2、實現外部的Comparator介面的類:
package comparatortest;
import java.util.Comparator;
public class GirlComparator implements Comparator<Girl> {
/**
* 重寫這個方法:自定義比較策略--年齡比較大的就比較大
* @param o1
* @param o2
* @return 比價值 大於0:o1比o2大 小於0:o1比o2小
*/
@Override
public int compare(Girl o1, Girl o2) {
return o1.getAge() - o2.getAge();
}
}
- 3、測試類:
package comparatortest;
public class GirlTest {
public static void main(String[] args) {
Girl girl1 = new Girl("A", 20);
Girl girl2 = new Girl("B", 15);
GirlComparator girlComparator = new GirlComparator();
int compare = girlComparator.compare(girl1, girl2);
System.out.println(compare);
}
}
Comparable和Comparator的主要區別在於:
(1).Comparable和Comparator 和 都是Java中的內部比較器介面,都是用來實現對一個自定義的類進行排序
(2). 不同的是實現Comparable介面是定義在類的內部,比較程式碼需要嵌入類的內部結構中
(3). Comparator 實現在類的外部,單獨實現第一個比較器,不需要對原來的類進行結構上的變化,屬於無侵入式的。