0

我在 Java 中有一个奇怪的问题。我可以解决它,但解决方案似乎效率低下。

我有一堂课,简化的是

 class Zot
 { 
      double edges[];
  }

问题是,在许多情况下,我希望实例 A 和实例 B 共享一个边缘实例。换句话说,实例 A 可以分配 edge[2] 并希望实例 B 共享 edge[2]。这很容易,因为我可以将实例 B 设置为指向实例的 A 边缘 [2]。但我怎样才能有效地做到这一点?如果我在实例 A 中分配边 [],然后我可以简单地分配 B 的实例指向 A。但通常我只想在 A 中分配单个边(例如边 [2]),然后在 B 中分配它。但是在 Java 中,不能(据我所知)分配数组的单个成员(就像在 C++ 中一样)。理想情况下,我只想分配有用的成员并分配它。当然,我可以分配所有 4 个成员,分配我需要的成员,然后将不需要的成员设置为 null 并让 GC 将其全部清除,

建议?

4

2 回答 2

1

您可以在两个类之外声明和分配double edges[],然后将此数组作为构造函数中的参数传递给要共享它的两个实例。

在 Java 中,数组也是一个对象。当您创建一个实例时,likedouble edges[] = new double[2]; edges将作为指针传递,而不是作为副本。

这意味着如果您对 A 类中的数组进行更改,那么 B 类也会看到此更改。

于 2013-08-23T22:55:28.390 回答
0

据我了解,您似乎希望edges在类之间共享数组中的单个元素,而不是共享整个数组本身。

如果您edges的数组是Objects 数组,那么这将是可能的,并且可能有意义。但是,由于您的数组是原始数组,因此没有共享单个元素的真正概念。

您可以将数组的一个元素指定为与另一个数组的元素相等,但是对一个数组中元素的后续更改将不会反映在另一个数组中。

您可以在类之间共享整个数组,在这种情况下,任何更改都将反映在两个数组中(好吧,只有一个数组,因此两个类都会看到它们都引用的单个数组的更改)。

最重要的是: 当您在 java 中声明一个基元数组时,内存会立即分配,因此仅声明数组的单个元素没有任何好处(或机制)。因此,对于您当前的数据模型,您没有理由不预先声明您的数组,因为您无法使用它们节省空间。

于 2013-08-23T23:16:02.680 回答