zoukankan      html  css  js  c++  java
  • Java实现泛型Stack-CPT102-Lab5

    主要的难点在于:

      1. 泛型的使用

      2. 内存的动态开辟

      3. 深度拷贝与浅拷贝的区别(line 30)

     1 package xxx.xxxxxxx;
     2 
     3 import java.util.EmptyStackException;
     4 
     5 public class ArrayStack<E> implements Cloneable {
     6 
     7     private E[] data;
     8     private int manyItems;
     9 
    10     public ArrayStack() {
    11         final int INITIAL_CAPACITY = 10;
    12         manyItems = 0;
    13         data = (E[]) new Object[INITIAL_CAPACITY];
    14     }
    15 
    16     public ArrayStack(int initialCapacity) {
    17         if (initialCapacity < 0)
    18             throw new IllegalArgumentException("initialCapacity is negative: " + initialCapacity);
    19         manyItems = 0;
    20         data = (E[]) new Object[initialCapacity];
    21     }
    22 
    23     public ArrayStack<E> clone() {
    24         ArrayStack<E> copy;
    25         try {
    26             copy = (ArrayStack<E>) super.clone();
    27         } catch (CloneNotSupportedException e) {
    28             throw new RuntimeException("This class does not implement Cloneable");
    29         }
    30         copy.data = data.clone();
    31         return copy;
    32     }
    33 
    34     public void ensureCapacity(int minimumCapacity) {
    35         E biggerArray[];
    36         if (data.length < minimumCapacity) {
    37             biggerArray = (E[]) new Object[minimumCapacity];
    38             System.arraycopy(data, 0, biggerArray, 0, manyItems);
    39             data = biggerArray;
    40         }
    41     }
    42 
    43     public int getCapacity() {
    44         return data.length;
    45     }
    46 
    47     public boolean isEmpty() {
    48         return manyItems == 0;
    49     }
    50 
    51     public E peek() {
    52         if (manyItems == 0)
    53             throw new EmptyStackException();
    54         return data[manyItems - 1];
    55     }
    56 
    57     public E pop() {
    58         if (manyItems == 0)
    59             throw new EmptyStackException();
    60         return data[--manyItems];
    61     }
    62 
    63     public void push(E e) {
    64         if (manyItems == data.length)
    65             ensureCapacity(manyItems * 2 + 1);
    66         data[manyItems++] = e;
    67     }
    68 
    69     public int size() {
    70         return manyItems;
    71     }
    72 
    73     public void trimToSize() {
    74         E trimmedArray[];
    75         if (data.length != manyItems) {
    76             trimmedArray = (E[]) new Object[manyItems];
    77             System.arraycopy(data, 0, trimmedArray, 0, manyItems);
    78             data = trimmedArray;
    79         }
    80     }
    81 
    82     public int remainedCapacity() {
    83         return data.length - manyItems;
    84     }
    85 }
    ~~Jason_liu O(∩_∩)O
  • 相关阅读:
    python递归 及 面向对象初识及编程思想
    python匿名函数 与 内置函数
    python迭代器与生成器(二)
    linux---常用命令(二)
    linux---常用命令(一)
    Linux CentOS服务启动
    常见HTTP状态码
    oncontextmenu
    javascript之with的使用 弊端
    js的with语句使用方法
  • 原文地址:https://www.cnblogs.com/JasonCow/p/14592662.html
Copyright © 2011-2022 走看看