这两个java数据结构有什么区别?

时间:2017-12-03 14:26:38

标签: java arrays class

第一个版本是:

int[] a = new int[1000];
int[] b = new int[1000];

第二个版本是:

class Helper{
    int a;
    int b;
}
Helper[] c = new Helper[1000];

我的直觉告诉我,第二个更好,但我可以说服自己...... 任何人都可以比较这两种结构的时间复杂度和空间复杂度。例如,这两个版本的成本是否相同?或者第二个成本更低? 谢谢!

2 个答案:

答案 0 :(得分:4)

您应该问的真正问题是aa[i]bb[i]之间的关系是什么。如果aa[i]bb[i]是同一对象的属性(具有比“Helper”更有意义的描述),则应该将它们放在某个类中,而不是使用多个基本数组。毕竟,Java是一种面向对象的语言。

您不应该关心性能差异。这些都是微不足道的。重要的是你的代码对于阅读它的人来说都是有意义的。

答案 1 :(得分:1)

虽然伊兰是对的,但我还会增加几点。

当然,您很可能不会对性能感到烦恼 - 这种差异对于通用应用来说非常微不足道。 可读性至关重要

仍然是技术细节

空间复杂度是相同的(它总是与你拥有的元素一样多),但绝对值以字节为单位。

对数组会花费更多 - 每个Java对象都有几个字节的开销。在两个数组的情况下,每个数组只有几个字节的开销。

此外,在两个数组的情况下,每个数组的值将在内存中彼此相邻 - 读取其中一个数组的所有值在CPU缓存和内存布局方面将更有效。在对象数组的情况下,您现在有一个指向这些对象的链接数组,需要先读取对象的地址,然后才能访问该字段的实际值。

这些只是一般性观点,因此您可以了解正在发生的事情。在实践中,这一切都取决于您希望如何使用这些结构。

相关问题