为什么Joshua Bloch在有效的java中减少pop方法中堆栈的“大小”值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么Joshua Bloch在有效的java中减少pop方法中堆栈的“大小”值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1180字,纯文字阅读大概需要2分钟。
内容图文
![为什么Joshua Bloch在有效的java中减少pop方法中堆栈的“大小”值?](/upload/InfoBanner/zyjiaocheng/758/57149fbff85f4e37999b4647b2cfe5af.jpg)
这是Joshua Bloch撰写的第6章第24页的有效Java第2版第2章的代码.
在他定义的pop方法中,他使用元素[ – size].我想知道他为什么使用–size,而元素[size–]应该返回相同的正确值?
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
/**
* Ensure space for at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
} }
解决方法:
因为数组是基于0的索引.
想象一下,你有一个包含2个元素的堆栈.
所以堆栈的大小等于2,数组中有以下表示:
elements[0] = elem;
elements[1] = elem;
所以你需要在从堆栈中弹出elem之前减小大小,否则你将尝试弹出不存在的元素[2].因此在这种情况下使用中缀运算符.
return elements[--size];
相当于
size--;
return elements[size];
如果元素[size–];编写时,它会尝试弹出元素[2],然后将大小减小1.因此,每次要从堆栈中弹出元素时,都会抛出ArrayIndexOutOfBoundsException.
内容总结
以上是互联网集市为您收集整理的为什么Joshua Bloch在有效的java中减少pop方法中堆栈的“大小”值?全部内容,希望文章能够帮你解决为什么Joshua Bloch在有效的java中减少pop方法中堆栈的“大小”值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。