Chr*_*sD3 3 java sorting collections compare
使用Collections进行排序是非常好的,对我来说比使用Comparator好多了,因为我有多个相同的值,我宁愿它们不会被抛弃到垃圾桶.但Collections有它自己的问题,它似乎认为重复的2+组的数量小于它们实际的较小的计数器部分
例子有这些键和值("katy 1","mark 9","john 2","alice 11","josiah 22","chris 44")并按如下方式对它们进行排序
alice 11 katy 1 john 2 josiah 22 chris 44 mark 9
而不是正确的顺序katy 1 john 2 mark 9 alice 11 josiah 22 mark 44
我怎样才能解决这个问题?
由于您正在传递字符串,因此该集合无法告知您希望如何解释这些字符串(即按字符串中的数字排序).你必须更明确.
你基本上有两个选择:
选项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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("alice", 11));
persons.add(new Person("katy", 1));
// etc.
Collections.sort(persons);
Run Code Online (Sandbox Code Playgroud)
选项2:将字符串转换为键值对并将其放入a中TreeMap,这会自动保持按键排序的值:
TreeMap<Integer, String> map = new TreeMap<Integer, String>();
map.put(11, "alice");
map.put(1, "katy");
// etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6620 次 |
| 最近记录: |