一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java ArrayDeque實現(xiàn)Stack的功能

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

2020-04-14 11:27forrest420 JAVA教程

這篇文章主要介紹了Java ArrayDeque實現(xiàn)Stack功能的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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的源碼:    

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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ù)組容量默認(rèn)為16,head=(0-1)&(16-1)=15
    if (head == tail)
      doubleCapacity();
  }
 
/*每次擴(kuò)容都按插入的先后順序重新放入一個新的數(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的值回退,相當(dāng)于將棧的指針又向下移動一格。例如,12--〉13
    return result;
  }
 
  public E peekFirst() {
    return elements[head]; // elements[head] is null if deque empty
  }

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲天堂2015 | 久久精品亚洲热综合一本 | 欧美日韩综合网在线观看 | 91精品大神国产在线播放 | 亚洲熟区 | ysav67| 亚洲日本视频在线观看 | 亚洲H成年动漫在线观看不卡 | 精品国产免费久久久久久 | 玩两个少妇女邻居 | 午夜福利体检 | 成人欧美一区二区三区 | 成人免费网站视频ww | 太紧太深了受不了黑人 | 青青草原国产在线 | 国产综合视频 | 五月婷婷在线播放 | 成人影院在线观看视频 | 91在线老师啪国自产 | 高清免费毛片 | 超级乱淫寡妇 | 人人人人人看碰人人免费 | 性xxxx欧美高清 | 艹艹逼| 天堂网www中文天堂在线 | www.亚洲视频 | 免费一级欧美大片在线观看 | 成年人网站免费在线观看 | 国产裸露片段精华合集链接 | 明星ai人脸替换造梦在线播放 | 久久视频在线视频观看精品15 | 91香蕉视频在线播放 | 99r视频| 日本伊人色综合网 | 国产精品亚洲精品观看不卡 | 高清不卡一区二区 | 91寡妇天天综合久久影院 | 日韩欧美成末人一区二区三区 | 久久久久久久99精品免费观看 | 天天白天天谢天天啦 | 免费看打屁股视频的软件 |