comparable和comparator
comparable
当类需要有序的保存在集合中的话,类可以实现comparable接口,使类具有比较的功能
package comparator接口;
package comparator接口;
/**
* @author 小七
* @date 2022/11/22
* @time 8:28
*/
public class Student implements Comparable<Student>{
private Integer id;
private String name;
private Integer score;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", score=" + score +
'}';
}
public Student(Integer id, String name, Integer score) {
this.id = id;
this.name = name;
this.score = score;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public Student(Integer id, String name){
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Student o) {
if(this.score == o.score){
return this.id - o.id;
}else {
return this.score - o.score;
}
}
public Student() {
}
}
package comparator接口;
import com.sun.source.tree.Tree;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
/**
* @author 小七
* @date 2022/11/22
* @time 8:33
*/
public class ComParableDemo1 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student(1,"张三");
Student s2 = new Student(2,"李四");
Student s3 = new Student(3,"王五");
Student s4 = new Student(4,"赵六");
Student s5 = new Student(5,"王七");
list.add(s1);
list.add(s3);
list.add(s5);
list.add(s2);
list.add(s4);
System.out.println(list);
//[Student{id=1, name='张三', score=68}, Student{id=3, name='王五', score=89}, Student{id=5, name='王七', score=90}, Student{id=2, name='李四', score=55}, Student{id=4, name='赵六', score=90}]
Collections.sort(list);
System.out.println(list);
//[Student{id=2, name='李四', score=55}, Student{id=1, name='张三', score=68}, Student{id=3, name='王五', score=89}, Student{id=4, name='赵六', score=90}, Student{id=5, name='王七', score=90}]
}
}
comparator
要比较的类没有实现comparable接口,但仍需要比较,可以定义comparator来实现
1.定义比较器
package comparator接口;
import java.util.Comparator;
/**
* @author 小七
* @date 2022/11/22
* @time 9:04
*/
public class MyComparator implements Comparator<String> {
@Override
//按照字符串的长度进行排序,当长度相同时,按照第一个字符的ASCII码比较
public int compare(String o1, String o2) {
if(o1.length() == o2.length()){
return o1.charAt(0) - o2.charAt(0);
}else {
return o1.length()-o2.length();
}
}
}
2.实例
package comparator接口;
import com.sun.source.tree.Tree;
import org.junit.Test;
import java.util.*;
/**
* @author 小七
* @date 2022/11/22
* @time 8:33
*/
public class ComParableDemo1 {
@Test
public void test2(){
ArrayList<String> list = new ArrayList<>();
list.add("awkward");
list.add("substantial");
list.add("banana");
list.add("abandon");
System.out.println(list);
//[awkward, substantial, banana, abandon]
Collections.sort(list, new MyComparator());
System.out.println(list);
//[banana, awkward, abandon, substantial]
}
}