求解释25~32行代码,size是多少?

1风一样的风了 2013-05-14 08:13:01
public class TestStackOfIntegers{
public static void main(String[] args){
StackOfIntegers stack = new StackOfIntegers();

for(int i = 0; i < 10; i++)
stack.push(i);
while(!stack.empty())
System.out.print(stack.pop() + " ");
}
}

class StackOfIntegers{
private int[] elements;
private int size;
private static final int DEFAULT_CAPACITY = 16;

public StackOfIntegers(){
this(DEFAULT_CAPACITY);
}

public StackOfIntegers(int capacity){
elements = new int[capacity];
}

public void push(int value){
if(size >= elements.length){
int[] temp = new int[elements.length * 2];
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp;
}
elements[size++] = value;
}

public int pop(){
return elements[--size];
}

public int peek(){
return elements[size - 1];
}

public boolean empty(){
return size == 0;
}

public int getSize(){
return size;
}
}
...全文
198 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 FirstHelloWorld 的回复:
这样说吧:size与elements都是成员变量每个对象都有自己的size与elements,这是成员变量在方法体内的应用啊!当你用stack.push(i)增加元素时,size首先是0,因为你用的是默认够造方法所以elements.length为16,然后通过elements[size++]=value;增加size的值,并添加元素。最后size的值为10.在你的程序里elements.length一直为16
真的谢谢你!
zhangxm2015 2013-05-15
  • 打赏
  • 举报
回复
这样说吧:size与elements都是成员变量每个对象都有自己的size与elements,这是成员变量在方法体内的应用啊!当你用stack.push(i)增加元素时,size首先是0,因为你用的是默认够造方法所以elements.length为16,然后通过elements[size++]=value;增加size的值,并添加元素。最后size的值为10.在你的程序里elements.length一直为16
zhangxm2015 2013-05-15
  • 打赏
  • 举报
回复
这样说吧:size与elements都是成员变量每个对象都有自己的size与elements,这是成员变量在方法体内的应用啊!当你用stack.push(i)增加元素时,size首先是0,因为你用的是默认够造方法所以elements.length为16,然后通过elements[size++]=value;增加size的值,并添加元素。最后size的值为10.在你的程序里elements.length一直为16
zhangxm2015 2013-05-15
  • 打赏
  • 举报
回复
这样说吧:size与elements都是成员变量每个对象都有自己的size与elements,这是成员变量在方法体内的应用啊!当你用stack.push(i)增加元素时,size首先是0,因为你用的是默认够造方法所以elements.length为16,然后通过elements[size++]=value;增加size的值,并添加元素。最后size的值为10.在你的程序里elements.length一直为16
  • 打赏
  • 举报
回复
引用 1 楼 FirstHelloWorld 的回复:
说一下我的理解:

public void push(int value){
        if(size >= elements.length){
            int[] temp = new int[elements.length * 2];
            System.arraycopy(elements, 0, temp, 0, elements.length);
            elements = temp;
        }
        elements[size++] = value;
    }
这其实是ArrayList的底层实现罢了,你所定义的的类的底层是由一个数组来维护的,这个数组本身有一个默认的长度,当你向数组中添加元素时,先判断是否已达到原有数组的长度,如果达到,则在新建一个数组长度是原数组的两倍,然后将原数组中的元素拷贝到新数组中。对于你说的size的大小问题我认为是你存储元素的个数。 对于模仿Stack实现其实你可以用现成的ArrayList类或者LinkedList类,建议楼主看一下他们的源代码
那我到底应该怎么读size >= elements.length,size是多少,要不然我怎么判断?
zhangxm2015 2013-05-14
  • 打赏
  • 举报
回复
这里有个LinkedList的实现:

import java.util.LinkedList;

public class Stack<T>
{
	private LinkedList<T> storage = new LinkedList<T>();
	public void push(T v){storage.addFirst(v);}
	public T peek(){return storage.getFirst();}
	public T pop(){return storage.removeFirst();}
	public boolean empty(){return storage.isEmpty();}
	public String toString(){return storage.toString();}
}
zhangxm2015 2013-05-14
  • 打赏
  • 举报
回复
说一下我的理解:

public void push(int value){
        if(size >= elements.length){
            int[] temp = new int[elements.length * 2];
            System.arraycopy(elements, 0, temp, 0, elements.length);
            elements = temp;
        }
        elements[size++] = value;
    }
这其实是ArrayList的底层实现罢了,你所定义的的类的底层是由一个数组来维护的,这个数组本身有一个默认的长度,当你向数组中添加元素时,先判断是否已达到原有数组的长度,如果达到,则在新建一个数组长度是原数组的两倍,然后将原数组中的元素拷贝到新数组中。对于你说的size的大小问题我认为是你存储元素的个数。 对于模仿Stack实现其实你可以用现成的ArrayList类或者LinkedList类,建议楼主看一下他们的源代码

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧