1

我有一个哈希图,我希望在这个哈希图中得到一个键数组,但我希望对数组进行排序。

例如,如果地图如下所示:

<"2",obj1>
<"4",obj2>
<"6",obj3>
<"10",obj4>
<"5",obj5>
<"1",obj6>
<"15",obj7>
<"3",obj8>

我希望数组是:[“1”,“2”,“3”,“4”,“5”,“6”,“10”,“15”]

越快越好。有没有内置的方法来做到这一点?

更新 1

当我使用 TreeMap 时,键按以下顺序排序:

“1”、“10”、“2”等。

但我希望它们像:“1”、“2”、“3”..“10”、“15”。

4

2 回答 2

5

我有一些像“10A”、“2AB”这样的键

在这种情况下,您需要一个自定义比较器,例如

public static void main(String... args) {
    NavigableMap<String, Object> map = new TreeMap<String, Object>(new Comparator<String>() {
        final Pattern pattern = Pattern.compile("(\\d+)(.*)");

        @Override
        public int compare(String o1, String o2) {
            Matcher matcher1 = pattern.matcher(o1);
            Matcher matcher2 = pattern.matcher(o2);
            matcher1.find();
            matcher2.find();
            int cmp = Long.compare(Long.parseLong(matcher1.group(1)), Long.parseLong(matcher2.group(1)));
            if (cmp != 0)
                return cmp;
            return matcher1.group(2).compareTo(matcher2.group(2));
        }
    });

    map.put("1", "one");
    map.put("1A", "oneA");
    map.put("10", "ten");
    map.put("10AB", "tenAB");
    map.put("15", "fifteen");
    map.put("2", "two");
    map.put("2AB", "twoAB");
    map.put("2", "three");

    System.out.println(map.keySet());
}

印刷

[1, 1A, 2, 2AB, 10, 10AB, 15]
于 2012-11-08T11:31:58.330 回答
2

如果由于某种原因不能将您的代码转换为自然排序的 Map ,则有内置工具可以返回键集并手动对其进行排序 -

    Object[] keys = yourMap.keySet().toArray();
    Arrays.sort(keys);

    System.out.println(Arrays.toString(keys));
于 2012-11-08T11:38:26.467 回答