gpt4 book ai didi

java - ArrayList 引用行为

转载 作者:行者123 更新时间:2023-12-02 00:30:10 24 4
gpt4 key购买 nike

我对 ArrayList 的行为完全感到困惑。写了很长的帖子,然后意识到没有人会分析庞大的代码,所以这只是问题的核心。数字是为了方便起见,但在我的应用程序中,这些 0 和 24 是动态值。

ArrayList<VoipBlock> sortedBlocks = new ArrayList<VoipBlock>();

VoipBlock vb3 =new VoipBlock();

vb3=sortedBlocks.get(0);

vb3.setPacketNumber(24);

本质上我的最终目标是:修改并添加回 arrayList 作为新值。然而,当我这样做时,ArrayList -> unsortedBlocks.get(0); 中位置 0 的人复制了对 vb3 所做的所有更改,这当然不是我想要的。我希望 vb3 获取与 ArrayList 内的 VoipBlock 相同的值,但我希望将其分离。

这是另一种按引用传递的情况。我讨厌技术解释 - Java 按值传递所有内容,但在某些情况下它按值传递引用 - 这与说非油性油相同。请帮忙。

这让我想起了我学习 JavaScript 的开始 - 我讨厌这门语言 - 直到我在 lynda.com 上观看了适当的 Material - JavaScript 良好实践? - 图表杀了我。正是这种懒惰的描述让我们年轻人远离了辉煌的技术,而不是技术本身。

请不要让它困扰我的压力,也不要以任何方式冒犯我,这只是一般的提示,也许有人会看看它,让生活变得更好:-)

感谢您的宝贵时间,迫切等待帮助:-)

最佳答案

为了实现您的目标,您可以使用克隆方法。您必须在 VoipBlock 类中重写此方法

假设 VoipBlock 如下

public class VoipBlock {

private int packetNumber;
private String type;

public int getPacketNumber() {
return packetNumber;
}

public String getType() {
return type;
}

public void setPacketNumber(int value) {
packetNumber = value;
}

public void setType(String value) {
type = value
}

public VoipBlock clone() {
VoipBlock clone = VoipBlock();
clone.setType(this.getType());
clone.setPacketNumber(this.getPacketNumber());
return clone;
}

}

因此,使用相同的代码,您可以执行如下操作

ArrayList<VoipBlock> sortedBlocks = new ArrayList<VoipBlock>();

VoipBlock vb3 =new VoipBlock();

sortedBlocks.add(vb3);

vb3=sortedBlocks.get(0).clone();

vb3.setPacketNumber(24);

请注意,在上面的代码段中调用克隆方法后,vb3 会被分配一个新的 VoipBlock 实例。并且已经插入到数组中的 VoipBlock 保持不变。

如果您正在寻找 VoipBlock 实例的示例实例,稍后您希望将其用于创建类似的实例。检查代码的不变性/可变性方面。检查 Joshua Blouch 的“Effective Java”

关于java - ArrayList 引用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245965/

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