在性能方面,是一个比java中的自定义类更好还是更差的双精度数组?

时间:2011-09-14 05:11:01

标签: java arrays performance optimization readability

我在Java中编写了一个简单的GJK算法实现(凸形碰撞),它涉及到3D矢量的大量简单计算。在性能与可读性方面,最好将点存储为double [3]并且有一大堆静态方法来处理它们(加,减,点,交叉,否定等)或者使用带有方法的类包含在?

双精度数组的问题在于,如果使用专门的方法,则需要进行简单的减法(例如)多个循环,或者如果它们被硬编码,则代码变得非常长.Point对象使代码更具可读性,但是我认为这不是一个微不足道的性能开销值得吗?

5 个答案:

答案 0 :(得分:6)

我的建议:使用您所花费的最少的工作使其工作,然后再进行优化。可能会发现应用程序中的瓶颈完全不同,碰撞检测的改进只是一个小问题。

例如,假设您发现应用程序花费10%的时间进行冲突检测,并且50%的时间用于磁盘读取。如果你可以使用缓存将磁盘读数减少一半,那么你的执行速度提高了25%,这是你完全消除冲突检测时间所能达到的最佳值的两倍。

正如Donald Knuth所说:“过早优化是所有邪恶的根源。”

答案 1 :(得分:0)

如果您需要执行操作,搜索或编辑数据的其他功能,我会使用该对象。也许你的基类可以是一个数组。

答案 2 :(得分:0)

恕我直言,OOP的基本原则是让对象定义合同并履行其职责(通常是单一的)。所以你绝对应该上课;这也将使您的课程更易于维护和阅读。

答案 3 :(得分:0)

制作课程总是更好,这种方式不仅可以提高可读性,而且还可以实现可扩展性,您可以随时扩展课程的意义。在我理解oops的魔力之前,我也会感觉一样,但现在我真的知道它可以为我的项目创造什么差异。你可以从oops中获得很多建议。

答案 4 :(得分:0)

我认为

Point point = new Point(x, y, z);

更像是一个点而不是

double[] point = {x, y, z};

所以,去上课吧!