0049:班级排名

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

信息科学技术学院年终评定讲学金,需要对整个年级的学生按照平均分数进行排名.
要求:根据输入的学号和平均成绩,按照平均成绩降序输出学号
如果平均成绩相同,按照输入的顺序输出。

输入

第一行为N,表示输入N位学生的信息,接着的N行输入学生信息,1<=N<=500
学生信息的格式为:学号 平均成绩
学号的长度小于10,平均成绩在1-100之间.

输出

按照平均成绩降序输出学号,如果平均成绩相同,按照输入顺序输出

样例输入

5
10948001 80
10948004 90
10948101 95
10948102 80
10948209 90

样例输出

10948101
10948004
10948209
10948001
10948102

提示

有些排序算法可能不能保证按照输入顺序输出


这题就是简单的Map按value排序,但注意不能使用TreeHash,因为他不会按插入的顺序排序,默认会按照key的值降序排序,

map有三个实现类:HashMap,LinkedHashMap,TreeMap,set也类似,HashSet,LinkedHashSet,TreeSet。Hash开头的会按随机排序,Linked开头的会按加入顺序排序,Tree开头的可以自定义排序规则

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.LinkedHashMap;
import java.util.Scanner;

public class Main {

static LinkedHashMap<String,Integer> map1=new LinkedHashMap<String,Integer>();

public static void main(String[] args){
Scanner cin=new Scanner(System.in);

int n=cin.nextInt();
for(int i=1;i<=n;i++){
String s = cin.next();
int t = cin.nextInt();
map1.put(s,t);
}
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map1.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String, Integer>>(){
//降序排序
public int compare(Entry<String,Integer> o1,Entry<String ,Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String, Integer> mapping:list) {
System.out.println(mapping.getKey());
}

}
}