法一:使用TreeSet
其中,在StudentTest类中实现了Comparable接口,重写了compareTo方法
public static void main(String[] args) {
TreeSet set = new TreeSet();
Scanner scan=new Scanner(System.in);
for (int i=0;i<4;i++){
String name=scan.next();
int score=scan.nextInt();
set.add(new StudentTest(name,score));
}
System.out.println(set);
int num=1;
for(Object obj:set){
if(obj instanceof StudentTest){
StudentTest s=(StudentTest)obj;
System.out.println(s.name);
num+=1;
if(num>3){
break;
}
}else{
throw new RuntimeException("输入类型不匹配");
}
}
}
法二:使用TreeMap
在TreeMap构造器中匿名Comparator对象进行从大到小排序(默认都是从小到大的)
public static void main(String[] args) {
//自然排序是从小到大的,需要定制排序
TreeMap map=new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Integer && o2 instanceof Integer){
Integer i1=(Integer)o1;
Integer i2=(Integer)o2;
return -Integer.compare(i1,i2);
}else{
throw new RuntimeException("输入类型不匹配");
}
}
});
Scanner scan=new Scanner(System.in);
for(int i=0;i<4;i++){
String name=scan.next();
int score=scan.nextInt();
map.put(score,name);
}
Set set=map.keySet();
int i=0;
for(Object score:set){
System.out.println(map.get(score));
i++;
if(i>=3){
break;
}
}
}