Java中HashMap的排序
我有一张地图,上面有键和值 钥匙:-案例1、案例2……案例10 值:-1月、2月……10月 现在,当我将此映射放入数组列表中(以便对其进行排序)时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(
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,我建议你只使用数组来代替…)