java學習筆記——自訂實現Stack集合

來源:互聯網
上載者:User
public class MyStack<E> {private Object[] elements; // 聲明一個object類型的數組private int size; // 數組中實際的元素個數public MyStack() {elements = new Object[10]; // 初始長度為10}// 檢查堆棧是否為空白public boolean empty() {return size == 0; // 元素個數為0返回true,否則返回false。}// 查看堆棧頂部的對象public E peek() {//如果沒有元素返回nullif (empty()) {return null; }//如果有元素就返回最後一個return (E) elements[size - 1];}// 移除堆棧頂部的對象public E pop() {E e = peek(); //拿到最後一個元素的備份elements[size - 1] = null;  //給數組最後一個元素賦null值size--; //元素個數減1return e; }// 把項壓入堆棧頂部。public E push(E item) {ensureCapacity(size + 1); //檢查容量elements[size++] = item;  //儲存傳進來的元素,元素個數自增1return item;}// 檢查容量是否足夠,不夠再原有的數組基礎建立新的數組private void ensureCapacity(int size) {int len = elements.length; //獲得數組現在的長度if (size > len) {int newLen = (len * 3) / 2 + 1; //每次數組擴充的容量elements = Arrays.copyOf(elements, newLen);}}// 返回對象在堆棧中的位置,以 1 為基數public int search(Object o) {int index = lastIndexOf(o); //得到元素在數組裡的下標return index == -1 ? index : size - index; }// 尋找下標的方法private int lastIndexOf(Object o) {if (empty()) {throw new EmptyStackException(); //如果數組為空白,就拋出一個自訂異常}//當傳進來的元素為空白時if (o == null) {for (int i = size - 1; i >= 0; i--) {if (elements[i] == null) {return i;}}//不為空白時} else {for (int i = size - 1; i >= 0; i--) {if (o.equals(elements[i])) {return i;}}}return -1; // 沒有找到,返回-1}// 自訂異常private static class EmptyStackException extends RuntimeException {public EmptyStackException() {super("堆棧為空白");}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.