java實現棧(可以無限push)


  一直想用java實現棧、隊列,可是沒時間,馬上要找實習了,就復習了一下算法,實現了一個簡單的棧,代碼還是有問題的,有興趣的兄弟幫忙改正

  問題:多線程的話pop和push只能有一個方法被執行需要加互斥變量

     

import java.util.Arrays;

public class Stack<Item> {
    private transient Object[] data;// 存儲數據
    private int top;// 表示棧頂元素
    private int oldCapacity;

    public Stack() {
        oldCapacity = 100;
        data = new Object[oldCapacity];// 需要擴充可以重新建數組,把這個復制過去
        top = -1;
    }

    public synchronized void push(Item t) { // 壓棧
        if (top >oldCapacity-2) {
            int newCapacity = (oldCapacity * 3) / 2 + 1;// 模仿Arraylist增加數組長度長度
            oldCapacity = newCapacity;
            data = Arrays.copyOf(data, newCapacity);
        }
        top++;
        data[top] = t;

    }

    public synchronized Item pop() { // 出棧
        if (top < 0) {
            return null;
        }
        Item t = (Item) data[top];
        top--;
        return t;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM