按数值降序对散列图键进行排序
问题描述:
如何根据数字值对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
的对象排序。这可以节省您自己编写比较器的麻烦。
答
尝试下面的代码,它工作正常,并根据订购标记将排序升序或降序的反向排序的映射。
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”,您可以通过这种方式反转排序)。 –