数组模拟堆栈的存储方式代码实践

堆栈的模式是先进后出,取出后堆栈中就没有取出的元素了,所以在模拟时候要注意这些问题。

 1 import java.util.Arrays;
 2 
 3 /*
 4  
 5 需求:编写一个类使用数组模拟堆栈的存储方式。  
 6 
 7 堆栈存储特点: 先进后出,后进先出。
 8 
 9 注意: 不再使用的对象,应该不要让变量指向该对象,要让该对象尽快的被垃圾回收期回收。
10 
11 
12  */
13 class StackList{
14     
15     Object[] elements;
16     
17     int index = 0 ; //当前的索引值
18     
19     public StackList(){
20         this.elements = new Object[3];
21     }
22     
23     //添加内容
24     public void add(Object o){
25         //添加元素之前应该要先检查是否容量够用。
26         ensureCapcity();
27         elements[index++] = o;
28     }
29     
30     
31     //出栈: 删除集合的元素,并且返回。
32     public Object pop(){
33         int tempIndex = --index;
34         Object o = elements[tempIndex];
35         elements[tempIndex] = null; //让该位置不再 引用着指定的对象,让垃圾回收期赶快回收该垃圾。
36         return o;
37     }
38         
39     //检查当前的数组使用够用。
40     public void ensureCapcity(){
41         if(index==elements.length){
42             //计算一个新的长度
43             int newLength =    elements.length*2;
44             elements = Arrays.copyOf(elements, newLength);
45         }
46     }
47     
48     //获取当前的元素 个数
49     public int size(){
50         return index;
51     }
52 
53 }
54 
55 public class Demo1 {
56 
57     public static void main(String[] args) {
58         StackList list = new StackList();
59         list.add("AA");
60         list.add("BB");
61         list.add("CC");
62         list.add("DD");
63     
64         int size = list.size();
65         for(int i = 0 ; i<size ; i++){
66             System.out.println(list.size() + "|" + list.pop());
67         }    
68     }
69 }

输出语句:System.out.println(list.size() + "|" + list.pop());分别输出当前堆栈的大小和堆栈顶端内容,那么输出结果如下:

4|DD
3|CC
2|BB
1|AA

因为每一次pop,并不是读内容,而是把内容取出来,所以每一次执行pop,堆栈都会少1。

posted @ 2017-08-12 21:02  K_artorias  阅读(437)  评论(0编辑  收藏  举报