2014-10-07 150 views
1

我想输入一些文本,分开字母,然后用键 - >独特的文本和值的字母 - >重复字母的数量做一个哈希表。如何按降序排列哈希值的值。哈希图排序java

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.HashMap; 

public class Menu { 
    public static void main(String args[]){ 

     String text = null; 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Please enter some text: "); 
     try { 
      text = br.readLine(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     HashMap<Character, Integer> map = new HashMap(); 

     String UpperCase = text.toUpperCase(); 
     for (int i = 0;i < UpperCase.length(); i++){ 


      Character currentChar = UpperCase.charAt(i); 

      if(map.get(currentChar) == null){ 
       map.put(currentChar, 1); 
      } else { 
       map.put(currentChar, map.get(currentChar) + 1); 
      } 

     } 

     for (Character name: map.keySet()){ 

      String key = name.toString(); 
      String value = map.get(name).toString(); 
      System.out.println(key + " " + value); 

      } 
    }  

} 
+2

'HashMap'不是一个有排序的地图。改为使用'SortedMap'的实现(例如'TreeMap')。 – Jesper 2014-10-07 19:32:12

+2

@Jesper他想按价值排序,而不是关键。 – MrHug 2014-10-07 19:33:01

回答

4

变换地图为List<Map.Entry<Character, Integer>>

List<Map.Entry<Character, Integer>> entries = new ArrayList<>(map.entrySet()); 

然后排序这个列表中的条目值,使用Comparator<Map.Entry<Character, Integer>>。或

,而不是存储整数作为地图的价值,存放CharacterOccurence的一个实例:

public class CharacterOccurrence { 
    private char character; 
    private int count; 
    ... 
} 

然后创建从地图的值的列表,并对此列表进行排序。