使用集合对值进行排序

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

我怎样才能解决这个问题?

Tud*_*dor 5

由于您正在传递字符串,因此该集合无法告知您希望如何解释这些字符串(即按字符串中的数字排序).你必须更明确.

你基本上有两个选择:

选项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)