第一个版本是:
int[] a = new int[1000];
int[] b = new int[1000];
第二个版本是:
class Helper{
int a;
int b;
}
Helper[] c = new Helper[1000];
我的直觉告诉我,第二个更好,但我可以说服自己...... 任何人都可以比较这两种结构的时间复杂度和空间复杂度。例如,这两个版本的成本是否相同?或者第二个成本更低? 谢谢!
答案 0 :(得分:4)
您应该问的真正问题是aa[i]
和bb[i]
之间的关系是什么。如果aa[i]
和bb[i]
是同一对象的属性(具有比“Helper”更有意义的描述),则应该将它们放在某个类中,而不是使用多个基本数组。毕竟,Java是一种面向对象的语言。
您不应该关心性能差异。这些都是微不足道的。重要的是你的代码对于阅读它的人来说都是有意义的。
答案 1 :(得分:1)
虽然伊兰是对的,但我还会增加几点。
当然,您很可能不会对性能感到烦恼 - 这种差异对于通用应用来说非常微不足道。 可读性至关重要。
仍然是技术细节:
空间复杂度是相同的(它总是与你拥有的元素一样多),但绝对值以字节为单位。
对数组会花费更多 - 每个Java对象都有几个字节的开销。在两个数组的情况下,每个数组只有几个字节的开销。
此外,在两个数组的情况下,每个数组的值将在内存中彼此相邻 - 读取其中一个数组的所有值在CPU缓存和内存布局方面将更有效。在对象数组的情况下,您现在有一个指向这些对象的链接数组,需要先读取对象的地址,然后才能访问该字段的实际值。
这些只是一般性观点,因此您可以了解正在发生的事情。在实践中,这一切都取决于您希望如何使用这些结构。