我在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应该是这样的:
{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}
感谢你的帮助!
使用已排序的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, Float> sortedMap = new TreeMap<>(yourMap);
使用TreeMap (PutAll方法):
Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
Map接口的实现:
- TreeMap -插入时自动按升序排序键。
- HashMap -插入的顺序将不被维护
- LinkedHashMap -将保持插入顺序。
使用TreeMap
。它实现了SortedMap
接口,因此自动对它包含的键进行排序。您只需按字母顺序对键进行排序即可获得所需的结果,因此您甚至不需要提供比较器。
hashmap从不排序。使用HashMap可以做的唯一一件事就是获取所有的键,并将它们存储在一个已排序的集合中,或者存储在一个List中,并对List进行排序。
使用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将自动按升序排序。如果要按降序排序,请使用以下代码:
将下面的代码复制到你的类和main 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");