1 comparable
1.1 什么是comparable
- comparable是内部比较器,元素自身具有比较性。
- 实现了comparable接口的类的对象的列表(list或者数据)可以使用collections.sort进行排序。
1.2 comparable的方法
- 假设我们通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y
public interface Comparable<T>{
public int ComparaTo()
}
1.3 示例
package comparaor;
//按照学生的年龄大小按照升序进行排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class StudentComparable implements Comparable<StudentComparable> {
public static void main(String[] args) {
//建立6个studentComparableOne实例
StudentComparable studentComparableOne=new StudentComparable("A张三",25);
StudentComparable studentComparableTwo=new StudentComparable("B李四",21);
StudentComparable studentComparableThree=new StudentComparable("C王五",23);
StudentComparable studentComparableFour=new StudentComparable("D政帅",26);
StudentComparable studentComparableFive=new StudentComparable("E真帅",28);
StudentComparable studentComparableSix=new StudentComparable("F曾帅",26);
//建立一个arrayList并增加元素
ArrayList<StudentComparable> studentComparable =new ArrayList<>();
studentComparable.add(studentComparableOne);
studentComparable.add(studentComparableTwo);
studentComparable.add(studentComparableThree);
studentComparable.add(studentComparableFour);
studentComparable.add(studentComparableFive);
studentComparable.add(studentComparableSix);
//打印排序前
Studentprint(studentComparable);
//排序
Collections.sort(studentComparable);
//分割线
System.out.println("=========我是分隔线=================");
//打印排序后
Studentprint(studentComparable);
}
private String name;
private int age;
public StudentComparable(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(StudentComparable studentComparable) {
int a=0;
if (this.age-studentComparable.age>0){
return 1;
}else if (this.age-studentComparable.age<0){
return -1;
}else{
return 0;
}
}
@Override
public String toString() {
return "StudentComparable{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//打印方法
public static void Studentprint( ArrayList<StudentComparable> arrayList){
//获取iterator对象
Iterator<StudentComparable> iterator = arrayList.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
};
}
}
2 comparaor
2.1 什么是comparaor
- comparaor是外部比较器,一般用用于类本身不具有比较性质,本身具有其他的比较方法。
- 在类的外部定义一个比较器。
2.2 comparaor的常用方法
- int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”
public interface Comparaor{
public int compare();
public boolean equals();
}
2.3 示例
外部比较器
package comparaor;
import java.util.Comparator;
//进行降序排序
public class OutComparaor implements Comparator<StudentComparable> {
@Override
public int compare(StudentComparable studentComparable1, StudentComparable studentComparable2) {
if (studentComparable1.age-studentComparable2.age>0){
return -1;
}else if (studentComparable1.age-studentComparable2.age<0){
return 1;
}else{
return 0;
}
}
}
实际排序
package comparaor;
//学生按照年龄降序排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class StudentComparable {
public static void main(String[] args) {
//建立6个studentComparableOne实例
StudentComparable studentComparableOne=new StudentComparable("张三",25);
StudentComparable studentComparableTwo=new StudentComparable("李四",21);
StudentComparable studentComparableThree=new StudentComparable("王五",23);
StudentComparable studentComparableFour=new StudentComparable("政帅",26);
StudentComparable studentComparableFive=new StudentComparable("真帅",28);
StudentComparable studentComparableSix=new StudentComparable("曾帅",36);
StudentComparable studentComparableSeven=new StudentComparable("小王",37);
StudentComparable studentComparableEight=new StudentComparable("小慌",38);
StudentComparable studentComparableNine=new StudentComparable("小三",36);
StudentComparable studentComparableTen=new StudentComparable("小二",33);
//建立一个arrayList并增加元素
ArrayList<StudentComparable> studentComparable =new ArrayList<>();
studentComparable.add(studentComparableOne);
studentComparable.add(studentComparableTwo);
studentComparable.add(studentComparableThree);
studentComparable.add(studentComparableFour);
studentComparable.add(studentComparableFive);
studentComparable.add(studentComparableSix);
studentComparable.add(studentComparableSeven);
studentComparable.add(studentComparableEight);
studentComparable.add(studentComparableNine);
studentComparable.add(studentComparableTen);
//打印排序前
Studentprint(studentComparable);
//排序
Collections.sort(studentComparable,new OutComparaor());
//分割线
System.out.println("=========我是分隔线=================");
//打印排序后
Studentprint(studentComparable);
}
public String name;
public int age;
public StudentComparable(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "StudentComparable{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//打印方法
public static void Studentprint( ArrayList<StudentComparable> arrayList){
//获取iterator对象
Iterator<StudentComparable> iterator = arrayList.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
};
}
}