如何根據數字值對HashMap
鍵進行排序?目前,在自然排序它看起來像這樣:按數值降序對散列圖鍵進行排序
1 10 13 2 26 29
我希望它看起來像這樣:
29 26 13 10 2 1
任何想法?
如何根據數字值對HashMap
鍵進行排序?目前,在自然排序它看起來像這樣:按數值降序對散列圖鍵進行排序
1 10 13 2 26 29
我希望它看起來像這樣:
29 26 13 10 2 1
任何想法?
A HashMap
無法排序。如果您需要排序的密鑰,請查看TreeMap
。爲了得到反轉命令你想要的,你就必須提供自定義Comparator
:
class ReversedOrdering implements Comparator<Integer> {
public int compare(Integer lhs, Integer rhs) {
// compare reversed
return rhs.compareTo(lhs);
}
}
編輯我只是碰到Collections.reverseOrder()
偶然發現你想要的東西,它的作用:它給你一個Comparator
能逆轉自然實施Comparable
的對象排序。這可以節省您自己編寫比較器的麻煩。
HashMap
不排序任何東西。如果您想保留排序的密碼,請使用TreeMap。
您可以使用TreeMap與可讓您指定Comparator的構造函數。
您可以使用TreeMap,然後調用它descendingMap()基本上與返回鍵
嘗試下面的代碼,它工作正常,並根據訂購標記將排序升序或降序的反向排序的映射。
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
/**
* @author Rais.Alam
* @date Dec 12, 2012
*/
public class HelloWorld
{
public static void main(String[] args)
{
final boolean order = true;
try
{
Map<Integer, String> map = new TreeMap<Integer, String>(
new Comparator<Integer>()
{
@Override
public int compare(Integer first, Integer second)
{
if (order)
{
return second.compareTo(first);
}
else
{
return first.compareTo(second);
}
}
});
map.put(2, "v");
map.put(3, "h");
map.put(4, "e");
map.put(1, "a");
System.out.println(map);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
我意識到我的鑰匙不再是數字了。謝謝你的信息! – Maurice
@Maurice:我已經添加了一個更簡單的解決方案來獲得自然排序的反向(鍵的類型無關緊要:如果實現「Comparable」,您可以通過這種方式反轉排序)。 –