让我们举一个简单的例子。这是一个班级
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);
}
答案 0 :(得分:3)
你不能在比较器运行的同时存储等级,因为,没有什么可以存储:在比较器完成之前,等级不是最终的。此外,在排序运行时修改对象不是一个好主意。
如果您必须存储排名,请使用您的代码,或应用类似外观的for
循环,并使用循环变量来设置排名。然而,它可能是一个糟糕的设计,因为只要你将一些学生添加到列表的后面,排名就会发生变化。更好的设计会将学生对象分开,并对连接到学生的不同对象和学生排名的列表进行排序。这样您就可以为同一组学生保留多个排名列表。
答案 1 :(得分:1)
不,在排序时你无法做到,因为排序方法以神秘的方式运作。 ; - )
如果students
是一个列表,您可以使用旧式for
循环来保存额外的计数器。
for (int i = 0; i < students.size(); i++)
students.get(i).setClassRank(i + 1);