Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中HashMap的排序_Java_Sorting_Arraylist_Hashmap - Fatal编程技术网

Java中HashMap的排序

Java中HashMap的排序,java,sorting,arraylist,hashmap,Java,Sorting,Arraylist,Hashmap,我有一张地图,上面有键和值 钥匙:-案例1、案例2……案例10 值:-1月、2月……10月 现在,当我将此映射放入数组列表中(以便对其进行排序)时 for(字符串键:dataValueMap.keySet()){ System.out.println(key+“”+dataValueMap.get(key)); } ArrayList键=新的ArrayList( dataValueMap.keySet()); 集合。排序(键); 用于(字符串计数器:键){ System.out.println(

我有一张地图,上面有键和值

钥匙:-案例1、案例2……案例10

值:-1月、2月……10月

现在,当我将此映射放入数组列表中(以便对其进行排序)时

for(字符串键:dataValueMap.keySet()){
System.out.println(key+“”+dataValueMap.get(key));
}
ArrayList键=新的ArrayList(
dataValueMap.keySet());
集合。排序(键);
用于(字符串计数器:键){
System.out.println(计数器);>>>>>>但它的打印方式如下:-案例1、案例10、案例2、案例3、案例4等。
}
请帮助解决此问题


提前感谢

使用自定义的
比较器
实现对您的收藏进行排序。这将获取并比较密钥的整数,但取决于格式大小写n

示例

List<String> keys = new ArrayList<>();
keys.add("case 10");        
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");        
Collections.sort(keys, new Comparator<String>() {

    @Override
    public int compare(String s1, String s2) {
        s1 = s1.split(" ")[1];
        s2 = s2.split(" ")[1];
        return Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2));
    }
});

for (String key : keys) {
    System.out.println(key);
}
List key=new ArrayList();
添加(“案例10”);
添加(“案例3”);
添加(“案例1”);
添加(“案例2”);
Collections.sort(键,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
s1=s1.拆分(“”[1];
s2=s2.拆分(“”[1];
返回Integer.compare(Integer.parseInt(s1)、Integer.parseInt(s2));
}
});
用于(字符串键:键){
系统输出打印项次(键);
}

使用自定义的
比较器
实现对集合进行排序。这将获取并比较密钥的整数,但取决于格式大小写n

示例

List<String> keys = new ArrayList<>();
keys.add("case 10");        
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");        
Collections.sort(keys, new Comparator<String>() {

    @Override
    public int compare(String s1, String s2) {
        s1 = s1.split(" ")[1];
        s2 = s2.split(" ")[1];
        return Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2));
    }
});

for (String key : keys) {
    System.out.println(key);
}
List key=new ArrayList();
添加(“案例10”);
添加(“案例3”);
添加(“案例1”);
添加(“案例2”);
Collections.sort(键,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
s1=s1.拆分(“”[1];
s2=s2.拆分(“”[1];
返回Integer.compare(Integer.parseInt(s1)、Integer.parseInt(s2));
}
});
用于(字符串键:键){
系统输出打印项次(键);
}

如果您确定密钥格式,则可以按空格将其拆分,并将实际值与比较器进行比较,例如:

Map<String, Object> myMap = 
        new TreeMap<String, Object>(new Comparator<String>()
        {
            public int compare(String o1, String o2)
            {
                Integer value1 = Integer.parseInt(o1.split("\\s+")[1]);
                Integer value2 = Integer.parseInt(o2.split("\\s+")[1]);
                return value1.compareTo(value2);
            } 
});
Map myMap=
新树映射(新比较器()
{
公共整数比较(字符串o1、字符串o2)
{
整数值1=Integer.parseInt(o1.split(“\\s+”)[1]);
整数值2=Integer.parseInt(o2.split(“\\s+”)[1]);
返回值1.比较(值2);
} 
});

虽然如果密钥格式不正确,它会中断,但我们可以根据预期的行为添加处理。

如果您确定密钥格式,则可以按空格将其拆分,并将实际值与比较器进行比较,例如:

Map<String, Object> myMap = 
        new TreeMap<String, Object>(new Comparator<String>()
        {
            public int compare(String o1, String o2)
            {
                Integer value1 = Integer.parseInt(o1.split("\\s+")[1]);
                Integer value2 = Integer.parseInt(o2.split("\\s+")[1]);
                return value1.compareTo(value2);
            } 
});
Map myMap=
新树映射(新比较器()
{
公共整数比较(字符串o1、字符串o2)
{
整数值1=Integer.parseInt(o1.split(“\\s+”)[1]);
整数值2=Integer.parseInt(o2.split(“\\s+”)[1]);
返回值1.比较(值2);
} 
});

尽管键格式不正确会导致中断,但我们可以根据预期的行为添加处理。

好的,您只需为您的字符串版本定义一个新的自定义
比较器,并可以编写任何逻辑来比较列表中的两个字符串

List<String> keys = new ArrayList<>();

keys.add("case 10");    
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");

Comparator<String> comparator = new Comparator<String>(){
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(Integer.parseInt(s1.substring(5)), Integer.parseInt(s2.substring(5)));
    }  
};

Collections.sort(keys, comparator);
for (String counter : keys) {
    System.out.println(counter);
}
List key=new ArrayList();
添加(“案例10”);
添加(“案例3”);
添加(“案例1”);
添加(“案例2”);
比较器比较器=新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回Integer.compare(Integer.parseInt(s1.substring(5)),Integer.parseInt(s2.substring(5));
}  
};
集合。排序(键、比较器);
用于(字符串计数器:键){
系统输出打印项次(计数器);
}

您只需为您的字符串版本定义一个新的自定义
比较器
,就可以编写任何逻辑来比较列表中的两个字符串

List<String> keys = new ArrayList<>();

keys.add("case 10");    
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");

Comparator<String> comparator = new Comparator<String>(){
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(Integer.parseInt(s1.substring(5)), Integer.parseInt(s2.substring(5)));
    }  
};

Collections.sort(keys, comparator);
for (String counter : keys) {
    System.out.println(counter);
}
List key=new ArrayList();
添加(“案例10”);
添加(“案例3”);
添加(“案例1”);
添加(“案例2”);
比较器比较器=新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回Integer.compare(Integer.parseInt(s1.substring(5)),Integer.parseInt(s2.substring(5));
}  
};
集合。排序(键、比较器);
用于(字符串计数器:键){
系统输出打印项次(计数器);
}

是的,您有字符串,作为字符串,“10”在“2”之前排序。如果你所有的条目都是整数,你应该这样对待它们。不过,这与映射有什么关系还不清楚——实际上,您只是在用字符串填充
ArrayList
。它们恰好是映射中的键这一事实是无关紧要的。(如果你只有键1-12,我建议你只使用数组来代替…)是的,你有字符串,作为字符串,“10”排序在“2”之前。如果你所有的条目都是整数,你应该这样对待它们。不过,这与映射有什么关系还不清楚——实际上,您只是在用字符串填充
ArrayList
。它们恰好是地图中的键这一事实是无关紧要的。(如果你只有键1-12,我建议你只使用数组来代替…)