不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~
1.Comparable
需要将所需排序的类实现Comparable接口,并实现内部的comparaTo方法,比较数值可用对应包装类的compare(也可以用做差形式),比较字符用String的compareTo自然情况都是从小到大排序,可在前面加个-号
2.Comparator
调用方法Collections.sort(list,new Comparator(){
public int compare(Person a,Person b){
return ;
})
重写内部的compare方法,重写方式和Comparable的相同
/**
*作者:魏宝航
*2020年11月24日,上午20:30
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Java比较器 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Person> list = new ArrayList<Person>();
Person p;
for (int i = 0; i < n; i++) {
p = new Person();
p.name = sc.next();
p.grade = sc.nextInt();
list.add(p);
}
//第一种是对排序的类进行实现comparable接口,重写内部的compareTo方法
//比较数值可用对应包装类的compare,比较字符用String的compareTo
//自然情况都是从小到大排序,可在前面加个-号
Collections.sort(list);
//第二种方式(利用比较器,自定义排序方式,重写compare方法)
/*Collections.sort(list,new Comparator<Person>() {
public int compare(Person a,Person b)
{
if(a.grade==b.grade)
{
return a.name.compareTo(b.name);
}
else {
return -Integer.compare(a.grade, b.grade);
}
}
});*/
Iterator<Person> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
class Person implements Comparable<Person> {
String name;
int grade;
public Person() {
}
public Person(String name, int grade) {
this.name = name;
this.grade = grade;
}
//重写方法,以便于输出想要数据
public String toString() {
return name + " " + grade;
}
@Override
public int compareTo(Person a) {
if (this.grade == a.grade)
return this.name.compareTo(a.name);
else {
return -Double.compare(this.grade, a.grade);
}
}
}