gpt4 book ai didi

java - 有效的 Java 项目 6 - 堆栈弹出实现

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

我一直在阅读《Effective Java》,通过过时的对象引用项,我想到的一件事是他对 pop() 的实现:

public Object pop(){
if (size == 0)
throw new EmptyStackException();

Object result = elements[--size];
elements[size] = null;
return result;
}

为什么需要创建对元素的新引用?为什么不这样做

elements[size] = null;
return elements[--size]

这会清空过时的对象引用,而无需为数组创建新的引用。

最佳答案

请注意,您的更改会逆转行为,假设 size = 5,让我们看看会发生什么:

原始(-- 优先):

Object result = elements[4];
elements[4] = null;
return result;

现在您的更改(-- 排在第二位):

elements[5] = null;
return elements[4]

因此您的实现将返回错误的值。实现需要拉出头部,然后将其设置为 null 作为一个单独的步骤,否则被删除的值将丢失。查看此实现,理论上您不能将值设置为 null,这将节省几行代码,但可能会带来相当严重的内存泄漏风险(在其他地方都已删除后,仍保留在堆栈头部上方的大对象) - 引用了它们)。此外,单独的行使这种行为更加明确,这对于人们稍后重新访问代码很有值(value)。冗长有时是你的 friend 。

关于java - 有效的 Java 项目 6 - 堆栈弹出实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148593/

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