<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 棧-Stack 定義:棧的元素是按后進先出\(LIFO\)的方法進行處理的,最后入棧的元素最先出棧;棧是一種線性集合,其添加和刪除都在一端進行;Stack類繼承了Vector類 ``` public class Stack<E> extends Vector<E> { public Stack() { } public E push(E item) {} public synchronized E pop() {} public synchronized E peek() {} public boolean empty() {} public synchronized int search(Object o) {} } ``` #### 棧的常用方法 * push:添加一個元素到棧的頂部 * pop:從棧的頂部移出一個元素 * peek:查看棧頂部的元素 * isempty:確定棧是否為空 * size:確定棧的元素數目 ### 棧實現方案 * 數組 * 鏈式\(單向鏈表/雙向鏈表\) ### 主要API * **入棧push** ``` public E push(E item) { addElement(item); return item; } public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj; } ``` 入棧是一個同步的方法,調用Vector的addElement方法,也是一個同步方法,先將修改次數加一,之后調用ensureCapacityHelper確認數組有足夠的空間能夠容納新的元素。最后將元素新增到數組,即Vector的末尾 * **出棧pop** ``` public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } ``` 出棧同樣是一個同步方法,先定義一個泛型對象obj,獲取到數組長度len,然后調用peek\(\)方法,獲取棧頂的元素賦值給obj,然后刪除棧頂元素;peek\(\)方法直接調用了Vector的elementAt方法,該方法不刪除棧頂的元素 通過源碼我們可以看到Vector底層是一個數組,說明Stack的實現是通過數組來實現的,然后通過對數組的操作來模仿棧的各種功能。而且在源碼中Vector的很多方法都是synchronized 的,也就是說是線程安全,所以說在多線程中是可以安全使用
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看