HashMap排序的兩種方法總結

/***************
result是排序的目標HashMap<String, Integer>
***************/
//統計詞頻,並存入HashMap result中
     tmp1=lineTxt.split("\t")[3];
       if(result.get(tmp1.trim())!=null)   
       {
        result.put(tmp1, result.get(tmp1)+1);
       }
       else
       {
        result.put(tmp1, 1);
       }
//第一種hashmap排序方法
       List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(result.entrySet());
      //按VALUE排序
       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
       {
        public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2)
        {//從高往低排序         
                 if(Integer.parseInt(obj1.getValue().toString()) > Integer.parseInt(obj2.getValue().toString()))
                           return 1;
                 if(Integer.parseInt(obj1.getValue().toString()) == Integer.parseInt(obj2.getValue().toString()))
                          return 0;
                 else
                         return -1;
         }
       });
       //按KEY排序
       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
          {
        public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2)
        {//從高往低排序         
                  return(obj1.getValue().toString().compareTo(obj1.getValue().toString()));
            }
        }); 
      for (int i = 0; i < list.size(); i++)
      {
       //System.out.println(list.get(i).getKey()+"\t"+list.get(i).getValue());
       frData.appendContentToFile(list.get(i).getKey()+"\t"+list.get(i).getValue());
      }
      
//第二種hashmap排序方法
       String[] words = new String[result.size()]; 
       Integer[] cishu = new Integer[result.size()]; 
       String[] keys = result.keySet().toArray(new String[0]); 
       words[0] = keys[0]; 
       cishu[0] = result.get(words[0]); 
       //使用插入排序法 
       for(int i = 1; i<keys.length;i++)
       {  
        String key = keys[i];  
        int j;  
        for(j = i;j>0;j--)
        {   
         if(cishu[j-1]<result.get(key))
         {    
          cishu[j] = cishu[j-1];    
          words[j] = words[j-1];   
         }
         else    
          break;  
        }     
        cishu[j] = result.get(key);  
        words[j] = key; 
       } 
       //輸出排序結果 
       for(int i = 0;i<words.length;i++)
       {
        frData.appendContentToFile(words[i]+"\t"+cishu[i]);
       }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章