private Map<Character, Integer> frequencies;
排序地圖我有一個Map
與Character
是鍵及其關聯Integer
存在價值。最好的方式與價值觀
什麼是按價值排序的最好/最快/有效的方式?
即地圖可具有
一個,1個
C,10
P,5個
S,7
和之後排序的, 這將是
一個,1個
P,5
s,7
c,10
我在考慮用Priority Queue和整數來做,但我會失去Charac如果整數值重複,則爲ter值
private Map<Character, Integer> frequencies;
排序地圖我有一個Map
與Character
是鍵及其關聯Integer
存在價值。最好的方式與價值觀
什麼是按價值排序的最好/最快/有效的方式?
即地圖可具有
一個,1個
C,10
P,5個
S,7
和之後排序的, 這將是
一個,1個
P,5
s,7
c,10
我在考慮用Priority Queue和整數來做,但我會失去Charac如果整數值重複,則爲ter值
優先級隊列是一個體面的方式 - 所有你需要做的是從地圖get the Entry
set,並覆蓋一Comparator
作爲輸入到隊列中。
Map<Character,Integer> map = new HashMap<Character, Integer>();
map.put('a',1);
map.put('c',10);
map.put('p',5);
map.put('2',7);
PriorityQueue<Entry<Character, Integer>> pq = new PriorityQueue<Map.Entry<Character,Integer>>(map.size(), new Comparator<Entry<Character, Integer>>() {
@Override
public int compare(Entry<Character, Integer> arg0,
Entry<Character, Integer> arg1) {
return arg0.getValue().compareTo(arg1.getValue());
}
});
pq.addAll(map.entrySet());
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
將產生(如預期):
a=1
p=5
2=7
c=10
注:避免使用Set
或鍵作爲地圖的值的Map
- 因爲它不會處理重複值很好。
使用Google Guava。它包含可以反轉的BiMap實現,然後僅對反轉的映射鍵進行排序。
Map<Character, Integer> myMap = HashBiMap.create();
// put your values in myMap
Map<Integer, Character> inversed = myMap.inverse();
SortedMap<Integer, Character> sortedInversed = new TreeMap<Integer, Character>(inversed);
所以只是重複的sortedInversed
如果多個鍵具有相同的值,這種方法會發生什麼? – amit
那麼你可以使用番石榴的多地圖....閱讀文件。 –
可能的重複[如何排序地圖對Java的值?](http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values -in-java)(小心頂級答案) –