我在java中有以下hashmap:
{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,B066 = 0.0,B056 = 9.0,B065 = 0.0,B055 = 9.0}
我应该如何对hashmap进行排序,以便将Alphabet和数字数字考虑在内?
生成的hashmap应如下所示:
{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,B085 = 0.0,B086 = 3.0,B095 = 0.0,B096 = 0.0}
感谢帮助!
答案 0 :(得分:218)
使用已排序的TreeMap
:
Map<String, Float> map = new TreeMap<>(yourMap);
它会自动按键排序。我认为自然String
顺序在你的情况下会很好。
请注意,由于查找优化而导致的HashMap
不会保留顺序。
答案 1 :(得分:23)
将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());
当您添加新元素时,它们将自动排序。
在您的情况下,甚至可能不需要实现比较器,因为字符串排序可能就足够了。但是如果你想实现特殊情况,比如小写字母在大写字母之前出现,或者以某种方式处理数字,请使用比较器。
答案 2 :(得分:10)
TreeMap
是您进行此类排序的最佳选择(自然)。 TreeMap
根据键自然排序。
HashMap
不会保留广告订单,也不会对地图进行排序。 LinkedHashMap
会保留插入顺序,但不会自动对地图进行排序。 TreeMap
界面中只有Map
按照自然顺序对数据进行排序(数字为第一个,大写字母为第二个,小写字母为最后一个)。
答案 3 :(得分:5)
使用TreeMap,虽然地图“看起来像那样”有点模糊 - 你也可以根据你的标准对键进行排序,然后迭代地图,检索每个对象。
答案 4 :(得分:3)
只需使用TreeMap
即可。它实现了SortedMap
接口,因此自动对其包含的密钥进行排序。您的密钥可以按字母顺序排序以获得所需的结果,因此您甚至不需要提供比较器。
HashMaps永远不会排序。 coulkd对HashMap唯一做的就是获取所有键,并将它们存储在有序集或列表中并对List进行排序。
答案 5 :(得分:3)
使用 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);
}
答案 6 :(得分:3)
您可以使用TreeMap
,它会以排序的形式存储值。
Map <String, String> map = new TreeMap <String, String>();
答案 7 :(得分:0)
TreeMap将自动按升序排序。如果要按降序排序,请使用以下代码:
将以下代码复制到您的类内和主要的execute方法之外:
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");
答案 8 :(得分:0)
使用TreeMap(构造函数):
WHERE
使用TreeMap(PutAll方法):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
地图界面的实现