班级排名 LinkedHashMap的按value排序
原创
©著作权归作者所有:来自51CTO博客作者mb5f5b1df7f1e34的原创作品,请联系作者获取转载授权,否则将追究法律责任
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());
}
}
}