如何在不使用Arraylist的情况下对TreeMap进行排序

时间:2013-11-27 09:39:29

标签: java map

我想按升序wrt“Student.name”对TreeMap进行排序。我不想创建一个新的ArrayList。有没有办法做到这一点?

Map studentMap = new TreeMap();
studentMap.put(id, student); //id is double

public class Student{
String name;
int number;
....

}

4 个答案:

答案 0 :(得分:2)

您可以通过两种方式执行此操作:

  1. 由于无法将基于值的比较器传递给TreeMap,因此可以执行以下操作:
    TreeMap sort by value

  2. 使Student实施Comparable接口

    public class Student implements Comparable<Student> {
        @Override
        public int compareTo(Student o) {
            return this.getName().compareTo(o.getName());
        }
    }
    
  3. 在第一种情况下,您需要在集合中调用上述方法。在第二个中,只需将学生添加到地图中即可。

答案 1 :(得分:1)

您可以在创建TreeMap时使用自定义比较器。

Map studentMap = new TreeMap(new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        // Your logic to sort it based on Student name goes here
        return 0;
    }
});

答案 2 :(得分:1)

如果您正在使用TreeMap,那么记录将已经排序。您需要在Student类中实现Comparable接口并且必须覆盖compareTo方法

Student implements Comparable {

  // override compareTo wrt name
  @Override
  public int compareTo(Student otherStudent) {
     return name.compareTo(otherStudent.name);
  }
}

答案 3 :(得分:0)

TreeMap根据对其条目进行排序,而非值。由于您有Comparator<Student>个密钥,因此无法提供Double

如果您确实需要从DoubleStudent的地图,则无法按照您想要的方式对其进行排序。 如果不考虑将TreeSet<Student>Comparator<Student>Comparable<Student>一起使用。