gpt4 book ai didi

java - 两个Java列表元素如何互相访问?

转载 作者:行者123 更新时间:2023-12-01 17:30:40 24 4
gpt4 key购买 nike

对我来说问题的根源是 Java 不允许引用。

问题可以简单概括一下。假设您有一个 Blob 对象列表:

class Blob {
public int xpos;
public int ypos;
public int mass;
public boolean dead;
private List<Object> giganticData;
public void blobMerge(Blob aBlob) {
. . .
if (. . .) {
this.dead = true;
} else {
aBlob.dead = true;
}
}
}

如果两个 Blob 足够接近,它们应该被合并,这意味着被比较的两个 Blob 之一应该具有另一个的属性(在这种情况下,添加质量并合并巨大的数据集),而另一个应该是标记为从列表中删除。

抛开如何最佳地识别相邻 blob 的问题(这本身就是一个 stackoverflow 问题),如何将 blobMerge() 逻辑保留在 Blob 类中?在 C 或 C++ 中,这很简单,因为您只需将一个 Blob 的指针传递给另一个 Blob,并且“主机”可以对“ guest ”执行任何它喜欢的操作。

但是,上面在 Java 中实现的 blobMerge() 将在“ guest ”Blob 的副本上进行操作,这有两个问题。 1) 无需承担复制 giganticData 的高昂成本,2) “ guest ”Blob 的原始副本将在包含列表中保持不受影响。

我只能看到两种方法:

1) 将副本传递进去,所有事情都做两次。换句话说,Blob A 托管 Blob B,Blob B 托管 Blob A。您最终得到了正确的答案,但所做的工作超出了必要的范围。

2) 将 blobMerge() 逻辑放入包含列表的类中。但是,当您开始子类化 Blob(BlueBlob、RedBlob、GreenBlob 等)时,这种方法的扩展性非常差,因此每个排列的合并逻辑都不同。您最终会在保存列表的通用容器中得到大部分特定于子类的代码。

我见过一些关于使用库向 Java 添加引用的内容,但是必须使用库才能使用引用的想法让我打消了这个想法。

最佳答案

为什么它会在副本上运行? Java 传递对对象的引用。引用与 C++ 指针非常相似。

关于java - 两个Java列表元素如何互相访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com