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]);
}
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]);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.