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

Java 如何以最佳方式对Hashmap中的字母数字键进行排序?,java,hashmap,treemap,Java,Hashmap,Treemap,我有一张地图 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);

我有一张地图

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);

建议如何执行此操作?

您可以从
映射创建
条目
对象的
集合。然后将自定义的
比较器
集合一起传递给
集合.sort()
。我已经给出了下面的模板

Set<Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
{
  public int compare( Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2 )
  {
    // Put your logic here for sorting.
  }
} );
Set=map.entrySet();
列表=新的ArrayList(集合);
Collections.sort(list,newcomparator()
{
公共整数比较(映射项o1,映射项o2)
{
//把你的逻辑放在这里进行分类。
}
} );

您可以使用
String
中的
regex
substring
方法从
字符串中分离字符和数字

您可以从
映射中创建
条目
对象的
。然后将自定义的
比较器
集合一起传递给
集合.sort()
。我已经给出了下面的模板

Set<Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
{
  public int compare( Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2 )
  {
    // Put your logic here for sorting.
  }
} );
Set=map.entrySet();
列表=新的ArrayList(集合);
Collections.sort(list,newcomparator()
{
公共整数比较(映射项o1,映射项o2)
{
//把你的逻辑放在这里进行分类。
}
} );

您可以使用
String
中的
regex
substring
方法从
字符串中分离字符和数字

创建并传递给TreeMap比较器,该比较器将只比较键中的整数部分(假设所有键都是
R[number]

在Java8中,您的地图可以如下所示

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

创建并传递给TreeMap Comparator,它将只比较键的整数部分(假设所有键都是
R[number]

在Java8中,您的地图可以如下所示

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

这是字符串的正常顺序。如果您需要不同的顺序,请使用
比较器以您需要的任何顺序比较字符串。您希望它们的顺序是什么?我希望顺序如下:{R0=11,R1=0,R2=22,R3=33,R4=44..}所有键都是
R[number]
的形式,或者可以有
a[number]
BB[number]
?都是R[number]形式的键仅限。这是字符串的正常顺序。如果您需要不同的顺序,请使用
比较器以您需要的任何顺序比较字符串。您希望它们的顺序是什么?我希望顺序如下:{R0=11,R1=0,R2=22,R3=33,R4=44..}所有键都是
R[number]
的形式,或者可以有
a[number]
BB[number]
?都是R[number]形式的键仅此而已。@TanuGarg我更新了答案,添加了Java 7解决方案。有一些导入问题。感谢您的快速支持。请注意,此解决方案需要在树映射的构造函数上设置比较器,然后您必须设置map@TanuGarg我更新了我的答案,添加了Java7解决方案。感谢您的快速支持。请注意,此解决方案需要在树映射的构造函数上设置比较器,然后您必须设置映射的值
{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}