繁体   English   中英

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

[英]What is the difference of these two java data structure?

第一个版本是:

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

第二个版本是:

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

我的直觉告诉我,第二个更好,但是我可以说服自己……。谁能为我比较这两种结构的时间复杂度和空间复杂度。 例如,这两个版本的空间是否相同? 还是第二个成本更低? 谢谢!

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

您不必在意性能差异。 这些将是微不足道的。 重要的是您的代码对任何阅读它的人都是有意义的。

尽管Eran是正确的,但我还要补充几点。

当然,您很有可能不会为性能而烦恼-对于通用应用程序而言,差异并不明显。 可读性很重要

尽管如此,就技术细节而言

空间复杂度是相同的(总是拥有尽可能多的元素),但是以字节为单位的绝对值是不同的。

成对的数组将花费您更多的钱-每个Java对象的开销为几个字节。 如果是两个阵列,则每个阵列的开销只有几个字节。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM