如何按整数键对数组的HashMap排序Java

如何按整数键对数组的HashMap排序Java,java,arrays,sorting,hashmap,Java,Arrays,Sorting,Hashmap,我有一个字符串数组的HashMap,由整数标识为键。我想按键对这个HashMap进行排序 我的hashmap:hashmap htab=newhashmap() 我尝试了TreeMap解决方案,但它没有与我的值兼容的构造函数(String[]): Map Map=new TreeMap((Comparator您不需要(Comparator如果您想对键进行排序,可以使用树集或树映射,如下所示。键是自然排序的,即排序由Integer类定义 Map<Integer, String[]> m

我有一个字符串数组的
HashMap
,由整数标识为键。我想按键对这个HashMap进行排序

我的hashmap:
hashmap htab=newhashmap()

我尝试了
TreeMap
解决方案,但它没有与我的值兼容的构造函数(
String[]
):
Map Map=new TreeMap((Comparator您不需要
(Comparator如果您想对键进行排序,可以使用树集或树映射,如下所示。键是自然排序的,即排序由Integer类定义

Map<Integer, String[]> map = new HashMap<>();

Set<Integer> naturallySortedKeys = new TreeSet<>(map.keySet());
Map<Integer, String[]> naturallySortedMap = new TreeMap<>(map);
Map Map=newhashmap();
Set naturallySortedKeys=newtreeset(map.keySet());
Map naturallySortedMap=新树映射(Map);

只需使用
HashMap
作为参数创建
树映射

public void test() {
    Map<Integer, String[]> htab = new HashMap<>();
    String[] a = {"a", "3", "5", "10", "0"};
    htab.put(21, a);
    String[] b = {"b", "3", "5", "10", "0"};
    htab.put(210, b);
    String[] c = {"c", "3", "5", "10", "0"};
    htab.put(2, c);
    Map<Integer, String[]> sorted = new TreeMap<>(htab);
    System.out.println(htab);
    System.out.println(sorted);
}
公共无效测试(){
Map htab=新的HashMap();
字符串[]a={“a”、“3”、“5”、“10”、“0”};
htab.put(21,a);
字符串[]b={“b”,“3”,“5”,“10”,“0”};
htab.put(210,b);
字符串[]c={“c”,“3”,“5”,“10”,“0”};
htab.put(2,c);
已排序映射=新树映射(htab);
系统输出打印LN(htab);
系统输出打印项次(已排序);
}

您可以根据jesper编写的注释使用树形图

    Map<Integer, String[]> map = new TreeMap<Integer, String[]>();
    map.put(21, new String[] {"abc","bcde", "regweger"});
    map.put(43, new String[] {"dbc","bgercde", "reggweer"});
    map.put(31, new String[] {"afbc","bcdrge", "rewgwger"});
    map.put(5, new String[] {"abgc","bcdee", "regwesgr"});
    map.put(98, new String[] {"abhhc","bc3gde", "regrer"});
    map.put(11, new String[] {"awqbc","bc33de", "frgeger"});

    System.out.println(map.toString());
Map Map=newtreemap();
put(21,新字符串[]{“abc”、“bcde”、“regweger”});
put(43,新字符串[]{“dbc”、“bgercde”、“reggweer”});
put(31,新字符串[]{“afbc”、“bcdrge”、“rewgwger”});
put(5,新字符串[]{“abgc”、“bcdee”、“regwesgr”});
put(98,新字符串[]{“abhhc”、“bc3gde”、“reger”});
put(11,新字符串[]{“awqbc”、“bc33de”、“frgeger”});
System.out.println(map.toString());

您将发现to字符串按键值的升序打印元素。

如果值是字符串数组,请使用
Map=new TreeMap();
而不是
Map
。是,或:Map tmap=new TreeMap(Htab)或者您可以使用LinkedHashMap并对LinkedHashMap的实例进行排序。这是一个如何按值对LinkedHashMap进行排序的示例,按键排序是相同的。他们正在查找排序的映射,而不是排序的键集。感谢您指出这一点。我刚刚编辑了我的答案,以提供两者。
public void test() {
    Map<Integer, String[]> htab = new HashMap<>();
    String[] a = {"a", "3", "5", "10", "0"};
    htab.put(21, a);
    String[] b = {"b", "3", "5", "10", "0"};
    htab.put(210, b);
    String[] c = {"c", "3", "5", "10", "0"};
    htab.put(2, c);
    Map<Integer, String[]> sorted = new TreeMap<>(htab);
    System.out.println(htab);
    System.out.println(sorted);
}
    Map<Integer, String[]> map = new TreeMap<Integer, String[]>();
    map.put(21, new String[] {"abc","bcde", "regweger"});
    map.put(43, new String[] {"dbc","bgercde", "reggweer"});
    map.put(31, new String[] {"afbc","bcdrge", "rewgwger"});
    map.put(5, new String[] {"abgc","bcdee", "regwesgr"});
    map.put(98, new String[] {"abhhc","bc3gde", "regrer"});
    map.put(11, new String[] {"awqbc","bc33de", "frgeger"});

    System.out.println(map.toString());