[英]Sorting hashmap based on keys
我在java中有以下哈希图:
{B046=0.0, A061=3.0, A071=0.0, B085=0.0, B075=3.0, B076=9.0, B086=3.0, B095=0.0, B096=0.0, A052=0.0, B060, B060, B060=0.0. =0.0, B055=9.0}
我应该如何对哈希图进行排序,以便将字母表和数字都考虑在内?
生成的哈希图应如下所示:
{A052=0.0,A061=3.0,A071=0.0,B046=0.0,B055=9.0,B056=9.0,B065=0.0,B066=0.0,B075=3.0,B076=9.0,B09,B056=9.0, =0.0,B096=0.0}
感谢您的帮助!
使用排序的TreeMap
:
Map<String, Float> map = new TreeMap<>(yourMap);
它会自动放置按键排序的条目。 我认为在您的情况下,自然String
排序会很好。
请注意,由于查找优化的HashMap
不保留顺序。
使用带有自定义比较器的 TreeMap。
class MyComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
// Your logic for comparing the key strings
}
}
TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
当您添加新元素时,它们将自动排序。
在您的情况下,甚至可能不需要实现比较器,因为字符串排序可能就足够了。 但是如果你想实现特殊情况,比如小写字母出现在大写字母之前,或者以某种方式处理数字,请使用比较器。
TreeMap
是此类排序(自然)的最佳选择。 TreeMap
自然地根据键进行排序。
HashMap
不保留插入顺序,也不对映射进行排序。 LinkedHashMap
保持插入顺序,但不会自动对地图进行排序。 只有Map
界面中的TreeMap
按照自然顺序对地图进行排序(数字在前,大写字母在后,小写字母在后)。
使用TreeMap ,尽管让地图“看起来像那样”有点模糊——您也可以根据您的标准对键进行排序并遍历地图,检索每个对象。
使用TreeMap您可以对地图进行排序。
Map<String, String> map = new HashMap<String, String>();
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
System.out.println(str);
}
您可以使用TreeMap
以排序形式存储值。
Map <String, String> map = new TreeMap <String, String>();
只需使用TreeMap
。 它实现了SortedMap
接口,从而自动对它包含的键进行排序。 您的键可以按字母顺序排序以获得所需的结果,因此您甚至不需要提供比较器。
HashMap 从不排序。 您可以使用 HashMap 做的唯一一件事就是获取所有键,并将它们存储在排序集或列表中并对列表进行排序。
使用 TreeMap(构造函数):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
使用 TreeMap(PutAll 方法):
Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
Map接口的实现:
TreeMap 将自动按升序排序。 如果要按降序排序,请使用以下代码:
在您的类中和主执行方法之外复制以下代码:
static class DescOrder implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
然后在你的逻辑中:
TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.