最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java ArrayDeque實現(xiàn)Stack的功能

 更新時間:2016年03月29日 11:53:49   作者:forrest420  
這篇文章主要介紹了Java ArrayDeque實現(xiàn)Stack功能的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在J2SE6引入了ArrayDeque類,它繼承了Deque(雙向隊列)接口,使用此類可以自己實現(xiàn)java.util.Stack類的功能,去掉了java.util.Stack的多線程同步的功能。

例如創(chuàng)建一個存放Integer類型的Stack,只要在類中創(chuàng)建一個ArrayDeque類的變量作為屬性,之后定義的出棧、入棧,觀察棧頂元素的操作就直接操作ArrayDeque的實例變量即可。 

import java.util.ArrayDeque; 
import java.util.Deque; 
 
public class IntegerStack { 
  private Deque<Integer> data = new ArrayDeque<Integer>(); 
 
  public void push(Integer element) { 
    data.addFirst(element); 
  } 
 
  public Integer pop() { 
    return data.removeFirst(); 
  } 
 
  public Integer peek() { 
    return data.peekFirst(); 
  } 
 
  public String toString() { 
    return data.toString(); 
  } 
 
  public static void main(String[] args) { 
    IntegerStack stack = new IntegerStack(); 
    for (int i = 0; i < 5; i++) { 
      stack.push(i); 
    } 
    System.out.println(stack); 
    System.out.println("After pushing 5 elements: " + stack); 
    int m = stack.pop(); 
    System.out.println("Popped element = " + m); 
    System.out.println("After popping 1 element : " + stack); 
    int n = stack.peek(); 
    System.out.println("Peeked element = " + n); 
    System.out.println("After peeking 1 element : " + stack); 
  } 
}  

java.util.ArrayDeque的源碼:    

private transient E[] elements; 
 private transient int head; 
 private transient int tail; 
 
/*此處存放e的位置是從elements數(shù)組最后的位置開始存儲的*/ 
 public void addFirst(E e) { 
    if (e == null) 
      throw new NullPointerException(); 
    elements[head = (head - 1) & (elements.length - 1)] = e;//首次數(shù)組容量默認為16,head=(0-1)&(16-1)=15 
    if (head == tail) 
      doubleCapacity(); 
  } 
 
/*每次擴容都按插入的先后順序重新放入一個新的數(shù)組中,最新插入的放在數(shù)組的第一個位置。*/ 
  private void doubleCapacity() { 
    assert head == tail; 
    int p = head; 
    int n = elements.length; 
    int r = n - p; // number of elements to the right of p 
    int newCapacity = n << 1; 
    if (newCapacity < 0) 
      throw new IllegalStateException("Sorry, deque too big"); 
    Object[] a = new Object[newCapacity]; 
    System.arraycopy(elements, p, a, 0, r); 
    System.arraycopy(elements, 0, a, r, p); 
    elements = (E[])a; 
    head = 0; 
    tail = n; 
  } 
 
  public E removeFirst() { 
    E x = pollFirst(); 
    if (x == null) 
      throw new NoSuchElementException(); 
    return x; 
  } 
 
  public E pollFirst() { 
    int h = head; 
    E result = elements[h]; // Element is null if deque empty 
    if (result == null) 
      return null; 
    elements[h] = null;   // 重新設(shè)置數(shù)組中的這個位置為null,方便垃圾回收。 
    head = (h + 1) & (elements.length - 1);//將head的值回退,相當于將棧的指針又向下移動一格。例如,12--〉13 
    return result; 
  } 
 
  public E peekFirst() { 
    return elements[head]; // elements[head] is null if deque empty 
  } 

以上就是本文的全部內(nèi)容,希望對大家學習java程序設(shè)計有所幫助。

相關(guān)文章

  • java 將方法作為傳參--多態(tài)的實例

    java 將方法作為傳參--多態(tài)的實例

    下面小編就為大家?guī)硪黄猨ava 將方法作為傳參--多態(tài)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 基于Spring Data的AuditorAware審計功能的示例代碼

    基于Spring Data的AuditorAware審計功能的示例代碼

    這篇文章主要介紹了基于Spring Data的AuditorAware審計功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解Java如何改變字符串中的字符

    詳解Java如何改變字符串中的字符

    這篇文章主要介紹了Java如何改變字符串中的字符,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • logback使用MDCFilter日志過濾源碼解讀

    logback使用MDCFilter日志過濾源碼解讀

    這篇文章主要介紹了logback使用MDCFilter日志過濾源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    這篇文章主要介紹了MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • JAVA JDK8 List分組的實現(xiàn)和用法

    JAVA JDK8 List分組的實現(xiàn)和用法

    今天小編就為大家分享一篇關(guān)于JAVA JDK8 List分組的實現(xiàn)和用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Springmvc nginx實現(xiàn)動靜分離過程詳解

    Springmvc nginx實現(xiàn)動靜分離過程詳解

    這篇文章主要介紹了Springmvc nginx實現(xiàn)動靜分離過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java實現(xiàn)UDP多線程在線咨詢

    Java實現(xiàn)UDP多線程在線咨詢

    這篇文章主要為大家詳細介紹了Java實現(xiàn)UDP多線程在線咨詢,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • java后端pageHelper分頁實現(xiàn)方法步驟

    java后端pageHelper分頁實現(xiàn)方法步驟

    這篇文章主要給大家介紹了關(guān)于java后端pageHelper分頁實現(xiàn)方法的相關(guān)資料,在我們的Java項目中分頁是必不可少的數(shù)據(jù)展示頁面,文中通過圖文以及示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java設(shè)計模式探究之觀察者模式詳解

    Java設(shè)計模式探究之觀察者模式詳解

    這篇文章主要為大家詳細介紹了JAVA的觀察者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-08-08

最新評論

应城市| 锡林郭勒盟| 黄石市| 丹凤县| 黄陵县| 玉树县| 涿州市| 密山市| 东安县| 永安市| 莆田市| 来凤县| 内乡县| 庆安县| 鸡泽县| 嘉义县| 岗巴县| 牟定县| 抚州市| 五原县| 潞西市| 无棣县| 根河市| 望城县| 景谷| 上饶市| 靖州| 威海市| 景洪市| 双辽市| 乌兰察布市| 兰溪市| 大田县| 玉环县| 宁德市| 苏尼特左旗| 陕西省| 开封县| 金山区| 饶河县| 土默特右旗|