根据键对hashmap进行sorting
我在java中有以下hashmap:
B056 = 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}
我应该如何sorting哈希映射,使字母,数字后面的数字考虑在内?
得到的哈希映射应该如下所示:
{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}
感谢帮助!
使用sorting的TreeMap
:
Map<String, Float> map = new TreeMap<>(yourMap);
它会自动把条目按键sorting。 我觉得自然的String
sorting在你的情况下会很好。
请注意,由于查找优化而导致的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());
当你添加新的元素,他们将被自动sorting。
在你的情况下,甚至可能不需要实现比较器,因为stringsorting可能就足够了。 但是,如果要实现特殊情况,例如小写字母出现在大写字母之前,或者以某种方式处理数字,请使用比较器。
TreeMap
是你最好的select这种sorting(自然)。 TreeMap
根据键自然sorting。
HashMap
不保留插入顺序,也不sorting映射。 LinkedHashMap
保留插入顺序,但不会自动对地图进行sorting。 只有Map
接口中的TreeMap
按照自然顺序(数字第一,大写字母第二,小写字母最后)对Map
sorting。
使用TreeMap ,虽然有一个“看起来像这样的地图”有点模糊 – 你也可以根据你的标准对键进行sorting,然后遍历地图,检索每个对象。
只需使用一个TreeMap
。 它实现SortedMap
接口,从而自动分类它包含的键。 您的密钥可以按字母顺序sorting以获得所需的结果,因此您甚至不需要提供比较器。
哈希映射从不sorting。 你唯一要做的就是使用HashMap获取所有的键值,并将它们存储在一个有序集合或一个List中,然后对List进行sorting。
使用TreeMap可以对Map进行sorting。
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
来存储sorting后的值。
Map <String, String> map = new TreeMap <String, String>();