清华复试-成绩排序

题目描述

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
      都按先录入排列在前的规则处理。

   例示:
   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();
		}
	}
}