排序不同类型的对象(性能)

时间:2012-11-04 14:41:33

标签: java performance sorting

假设我有一个名为Unit的类(带位置变量x)并将类扩展为UnitA,UnitB,UnitC等。

这是我想出来的:

Unit[] ordered = new Unit[a_num+b_num+c_num];
ordered = Arrays.copyOf(a_units, a_num); //and add b_units, c_units, etc
Arrays.sort(ordered); //sort using compareTo method
  • 为了获得最佳性能和整洁的编程,从左到右(x变量)对这些值进行排序的最佳方法是什么?
  • 对数组进行排序时,为了访问单位特定变量,如何找出每个条目的对象类型?

2 个答案:

答案 0 :(得分:5)

如果你必须找出每个条目的对象类型,那你就错了。

多态性是唯一的出路。这就是面向对象语言的用途。

您没有说明如何对单位进行排序。你的意思是物理单位,如长度米,质量千克,时间秒?如果是,“排序”是什么意思?当然,你可以按字母顺序排序,但我不知道它有多么有意义。

什么是“位置变量”?你的意思是你有一个单位长度与不同“位置”的米,脚,埃和弗隆等基础值?你会如何订购?受欢迎?答案的变化取决于你是否在少数仍然使用英国单位的国家之一(例如美国,甚至英格兰放弃英国单位!)或公制。

答案 1 :(得分:2)

Arrays.sort(ordered)将根据单位的自然排序(由compareTo方法定义)进行排序。如果自然顺序不是您想要的,那么使用Arrays.sort(array, Comparator)并传递一个比较单位位置的比较器。

关于你的第二个问题:你不应该知道单位的类型。你的Unit类应该提供你可以调用的多态方法,以及每个子类实现哪些方法来做适当的事情。始终是instanceof运算符和getClass()方法,但使用它们显示缺少OO设计,因此是不好的做法。