一,比較器
比較變量之間的大小 -> 排序
1. 可比性
此接口對(duì)實(shí)現(xiàn)它的每個(gè)類(lèi)的對(duì)象強(qiáng)制執(zhí)行排序。
實(shí)現(xiàn)此接口的對(duì)象的數(shù)組, 可以通過(guò)Arrays.sort自動(dòng)排序。
comparable中有個(gè)compareTo方法
將此對(duì)象與指定對(duì)象進(jìn)行順序比較。 當(dāng)此對(duì)象小于、等于或大于指定對(duì)象時(shí),返回負(fù)整數(shù)、零或正整數(shù)。
2. 比較器
一個(gè)比較接口,它對(duì)某些對(duì)象集合進(jìn)行排序。
可以將比較器(new了一個(gè)實(shí)現(xiàn)了comparator接口的對(duì)象)傳遞給排序方法(例如Collections.sort或Arrays.sort)。
用法場(chǎng)景:
如果這個(gè)類(lèi)是我們自己寫(xiě)的,需要比較排序, 實(shí)現(xiàn)Comprable, 如果不是我們自己寫(xiě)的代碼, 我們無(wú)法修改的代碼, 通過(guò)comparator。
二,Comparable
public class Student implements Comparable<Student>{
public String name;
public Integer score;
public Integer age;
public Student(String name, Integer score, Integer age) {
this.name = name;
this.score = score;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\\'' +
", score=" + score +
", age=" + age +
'}';
}
/**
* int aInt = gaoPeng.compareTo(tuEnXia);
* 此對(duì)象指的是gaoPeng, 指定對(duì)象指的是tuEnXia
* 將此對(duì)象與指定對(duì)象進(jìn)行大小比較。當(dāng)此對(duì)象小于、等于或大于指定對(duì)象時(shí),返回負(fù)整數(shù)、零或正整數(shù)
* @return
*/
@Override
public int compareTo(Student other) {
int diff = this.score - other.score;
return diff;
}
}
public class ComparableDemo01 {
public static void main(String[] args) {
Student student1 = new Student("張三", 700, 19);
Student student2 = new Student("李四", 666, 18);
Student student3 = new Student("王麻子", 750, 19);
// //1. 數(shù)組排序
// Student[] students = {student1,student2,student3};
// Arrays.sort(students);
// System.out.println(Arrays.toString(students));
//2, 集合的comparable排序
ArrayList students = new ArrayList<>();
students.add(student1);
students.add(student2);
students.add(student3);
// Collections.sort(students);
// System.out.println(students);
//這個(gè)地方要求傳入一個(gè)Compartor, 如果傳入是個(gè)null, arraylist將會(huì)自動(dòng)調(diào)用本集合中對(duì)象的comparable方法
students.sort(null);
System.out.println(students);
}
}
三,Comparator
public class PointComparator implements Comparator<Point> {
@Override
public int compare(Point point1, Point point2) {
int diff = point1.x + point1.y - point2.x - point2.y;
return diff;
}
}
public class PointComparator {
public static void main(String[] args) {
Point point1 = new Point(44, 55);
Point point2 = new Point(58, 56);
Point point3 = new Point(58, 96);
//1,數(shù)組排序
// Point[] points = {point1,point2,point3};
// Arrays.sort(points,new PointComparator());
// System.out.println(Arrays.toString(points));
//2 集合排序
LinkedList<Point> linkedList = new LinkedList<>();
linkedList.add(point1);
linkedList.add(point2);
linkedList.add(point3);
// Collections.sort(linkedList,new PointComparator());
// linkedList.sort(new PointComparator());
// System.out.println(linkedList);
//3 通過(guò)匿名內(nèi)部類(lèi)排序
Comparator<Point> comparator = new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
int diff = o1.x + o1.y - o2.x - o2.y;
return diff;
}
};
// linkedList.sort(comparator);
Collections.sort(linkedList,comparator);
System.out.println(linkedList);
}
}
-
接口
+關(guān)注
關(guān)注
33文章
8279瀏覽量
150056 -
比較器
+關(guān)注
關(guān)注
14文章
1616瀏覽量
106858 -
對(duì)象
+關(guān)注
關(guān)注
1文章
38瀏覽量
17343 -
整數(shù)
+關(guān)注
關(guān)注
0文章
13瀏覽量
6480 -
數(shù)組
+關(guān)注
關(guān)注
1文章
411瀏覽量
25839
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論