java - 如何以最佳方式对 Hashmap 中的字母数字键进行排序?

标签 java hashmap treemap

我有这样的 map

Map<String,Integer> mp = new TreeMap<>();
        mp.put("R1", 00);
        mp.put("R0", 11);
        mp.put("R2", 22);
        mp.put("R3", 33);
        mp.put("R5", 55);
        mp.put("R8", 88);
        mp.put("R4", 44);
        mp.put("R6", 66);
        mp.put("R9", 99);
        mp.put("R7", 77);
        mp.put("R11", 1111);
        mp.put("R14", 1414);
        mp.put("R10", 1010);
        mp.put("R12", 1212);
        mp.put("R13", 1313);
        mp.put("R15", 1515);
        mp.put("R17", 1717);
        mp.put("R19", 1919);

我想根据键进行排序。由于字母数字,TreeMap 无法工作,正在获取输出

{R0=11, R1=0, R10=1010, R11=1111, R12=1212, R13=1313, R14=1414, R15=1515, R17=1717, R19=1919, R2=22, R3=33, R4=44, R5=55, R6=66, R7=77, R8=88, R9=99}

建议如何做到这一点?

最佳答案

创建并传递给您的 TreeMap 比较器,它将仅比较键中的整数部分(假设所有键均采用 R[number] 形式)。

在 Java 8 中你的 map 看起来像这样

Map<String, Integer> mp = new TreeMap<>(
        Comparator.comparingInt(key -> Integer.parseInt(key.substring(1))));

在 Java 7 中,您可以将其重写为

Map<String, Integer> mp = new TreeMap<>(new Comparator<String>(){
    @Override
    public int compare(String key1, String key2) {
               //parse only text after first letter
        int k1 = Integer.parseInt(key1.substring(1));
        int k2 = Integer.parseInt(key2.substring(1));
        return Integer.compare(k1, k2);
    }
});

它将以某种方式对元素进行排序:

{R0=11, R1=0, R2=22, R3=33, R4=44, R5=55, R6=66, R7=77, R8=88, R9=99, R10=1010, R11=1111, R12=1212, R13=1313, R14=1414, R15=1515, R17=1717, R19=1919}

关于java - 如何以最佳方式对 Hashmap 中的字母数字键进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769266/

相关文章:

Java 克隆方法不起作用

java - 不知道我的算法使用什么数据结构

hadoop - 没有从我的 reducer 中获取聚合值

c - 结构体键的简单查找

java - 在 Java 中反转嵌套的 TreeMap

Java TreeMap时间复杂度-lowerKey

java - json 反序列化器到目标对象

java - Objective-C 的 NSDictionary 的 Java 等价物是什么?

TreeMap 中的 Java TreeMap - 标识符错误?

java - 每个事务后 Hibernate 提交会导致速度变慢