在java中对对象进行排序后存储排序顺序

时间:2015-08-21 22:18:52

标签: java collections

让我们举一个简单的例子。这是一个班级

public class Student
{int classRank;
 String Name
 float marks
}

这个类让我们说有5个对象s1,s2,s3,s4,s5和我使用比较器按顺序对对象进行排序。我的问题是,我可以在比较器运行的同时以某种方式存储classRank。如果没有,那么有比这更好的方法

int rank = 0;
for(Student s: students)
{ s.setClassRank(++rank);
}

2 个答案:

答案 0 :(得分:3)

你不能在比较器运行的同时存储等级,因为,没有什么可以存储:在比较器完成之前,等级不是最终的。此外,在排序运行时修改对象不是一个好主意。

如果您必须存储排名,请使用您的代码,或应用类似外观的for循环,并使用循环变量来设置排名。然而,它可能是一个糟糕的设计,因为只要你将一些学生添加到列表的后面,排名就会发生变化。更好的设计会将学生对象分开,并对连接到学生的不同对象和学生排名的列表进行排序。这样您就可以为同一组学生保留多个排名列表。

答案 1 :(得分:1)

不,在排序时你无法做到,因为排序方法以神秘的方式运作。 ; - )

如果students是一个列表,您可以使用旧式for循环来保存额外的计数器。

for (int i = 0; i < students.size(); i++)
    students.get(i).setClassRank(i + 1);