查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
解题思路一:
Treemap
package com.tonyluis.oj;
import java.util.*;
import java.util.Map.*;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
TreeMap<Integer, List<String>> treeMap = new TreeMap<Integer, List<String>>();
while (in.hasNext()) {
int num = in.nextInt();
int state = in.nextInt();
for (int i = 0; i < num; i++) {
String name = in.next();
int score = in.nextInt();
if (treeMap.containsKey(score))
treeMap.get(score).add(name);
else {
List<String> list = new ArrayList<String>();
list.add(name);
treeMap.put(score, list);
}
}
List<Entry<Integer, List<String>>> list = new ArrayList<Entry<Integer, List<String>>>(treeMap.entrySet());
if (state == 0)
Collections.reverse(list);
for (Entry<Integer, List<String>> entry : list)
for (String s : entry.getValue())
System.out.println(s + " " + entry.getKey());
treeMap.clear();
}
}
}
思路二:
LinkedHashMap+Comparator
import java.util.*;
import java.util.Map.*;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
LinkedHashMap<Integer, List<String>> hm = new LinkedHashMap<Integer, List<String>>();
while (in.hasNext()) {
int num = in.nextInt();
int state = in.nextInt();
for (int i = 0; i < num; i++) {
String name = in.next();
int score = in.nextInt();
if (hm.containsKey(score))
hm.get(score).add(name);
else {
List<String> list = new ArrayList<String>();
list.add(name);
hm.put(score, list);
}
}
List<Entry<Integer, List<String>>> list = new ArrayList<Entry<Integer, List<String>>>(hm.entrySet());
Comparator<Entry<Integer, List<String>>> c1 = new Comparator<Entry<Integer, List<String>>>() {
@Override
public int compare(Entry<Integer, List<String>> arg0, Entry<Integer, List<String>> arg1) {
// TODO Auto-generated method stub
return arg0.getKey() - arg1.getKey();
}
};
Comparator<Entry<Integer, List<String>>> c2 = new Comparator<Entry<Integer, List<String>>>() {
@Override
public int compare(Entry<Integer, List<String>> arg0, Entry<Integer, List<String>> arg1) {
// TODO Auto-generated method stub
return arg1.getKey() - arg0.getKey();
}
};
if (state == 1)
Collections.sort(list, c1);
else
Collections.sort(list, c2);
for (Entry<Integer, List<String>> entry : list)
for (String s : entry.getValue())
System.out.println(s + " " + entry.getKey());
hm.clear();
}
}
}
原文:http://www.cnblogs.com/tonyluis/p/5835563.html