我有一个hashmap,我希望得到这个hashmap中的一个键数组,但我希望对数组进行排序.
例如,如果地图如下所示:
<"2",obj1>
<"4",obj2>
<"6",obj3>
<"10",obj4>
<"5",obj5>
<"1",obj6>
<"15",obj7>
<"3",obj8>
Run Code Online (Sandbox Code Playgroud)
我希望数组为:["1","2","3","4","5","6","10","15"]
越快越好.有没有内置的方法来做到这一点?
更新1
当我使用TreeMap时,键按以下顺序排序:
"1","10","2"等.
但我希望它们像:"1","2","3"......"10","15".
我有一些像"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());
}
Run Code Online (Sandbox Code Playgroud)
版画
[1, 1A, 2, 2AB, 10, 10AB, 15]
Run Code Online (Sandbox Code Playgroud)