使用集合进行排序很漂亮,对我来说比使用比较器要好得多,因为我有多个相同的值,并且我希望它们不要被扔进垃圾桶。但 Collections 有它自己的问题,它似乎认为 2+ 组的重复数量小于其实际较小的对应部分
示例有这些键和值(“katy 1”,“mark 9”,“john 2”,“alice 11”,“josiah 22”,“chris 44”),并对它们进行排序如下
爱丽丝 11
凯蒂 1
约翰 2
约西亚书 22
克里斯 44
标记9
而不是正确的顺序
凯蒂 1
约翰 2
标记9
爱丽丝 11
约西亚书 22
标记44
我怎样才能解决这个问题?
由于您传递的是字符串,因此集合无法告诉您希望如何解释这些字符串(即按字符串中存在的数字排序)。你必须更明确。
基本上你有两个选择:
Option 1:新建一个数据类型,封装一个名字和一个数字,实现按数字比较:
public class Person implements Comparable<Person> {
private String name;
private int number;
public Person(String name, int number) {
this.name = name;
this.number = number;
}
public int compareTo(Person p) {
return this.number.compareTo(p.number);
}
}
Then:
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("alice", 11));
persons.add(new Person("katy", 1));
// etc.
Collections.sort(persons);
Option 2:将字符串转成键值对,放入a中TreeMap
,它自动保持按键排序的值:
TreeMap<Integer, String> map = new TreeMap<Integer, String>();
map.put(11, "alice");
map.put(1, "katy");
// etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)