【发布时间】:2011-11-05 20:45:48
【问题描述】:
如何按数值对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
有什么想法吗?
【问题讨论】:
试试下面的代码,它可以正常工作,根据订单标志,它会升序或降序排序。
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();
}
}
}
【讨论】:
您可以使用TreeMap,然后在其上调用descendingMap(),这基本上会返回一个键的逆序映射
【讨论】:
无法对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 的对象的自然顺序。这样就省去了自己编写比较器的麻烦。
【讨论】:
Comparable,您可以通过这种方式反转排序) .
您可以将TreeMap 与允许您指定Comparator 的构造函数一起使用。
【讨论】:
HashMap 不会对任何内容进行排序。如果要保持键排序,请改用TreeMap。
【讨论】: