J2SE6では、ArrayDequeクラスが導入され、Deque(双方向のキュー)インターフェイスを継承します。このクラスを使用して、java.util.stackクラスの関数を自分で実装し、java.util.stackのマルチスレッド同期関数を削除できます。
たとえば、整数タイプを保存するスタックを作成し、アレイデュークラスの変数をクラス内のプロパティとして作成し、スタックとして定義してスタックを入力し、スタックの上部の要素を観察し、アレイデクのインスタンス変数を直接操作します。
java.util.arraydequeをインポートします。 java.util.dequをインポートします。 public class integerstack {private deque <integer> data = new arraydequ <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( "5つの要素を押した後:" + stack); int m = stack.pop(); system.out.println( "popped element =" + m); System.out.println( "1つの要素をポップした後:" + stack); int n = stack.peek(); System.out.println( "Peeked Element =" + n); system.out.println( "1つの要素を覗いた後:" + stack); }} java.util.arraydequeのソースコード:
プライベートトランジェントE []要素。プライベートトランジェントインターヘッド。プライベートトランジェントインターテール; /*ここにeが保存されている場所は、要素配列の最後の位置から保存されます*/ public void addfirst(e e){if(e == null)throw new nullpointerexception();要素[head =(head -1)&(elements.length -1)] = e; //最初の配列容量のデフォルトは16、head =(0-1)&(16-1)= 15 if(head == tail)doublecapacity(); } /*容量が拡張されるたびに、挿入順に新しい配列に戻され、最新の挿入済みの配列が配列の最初の位置に配置されます。 */ private void doublecapacity(){assert head == tail; int p = head; int n = elements.length; int r = n -p; // p int newcapacity = n << 1; if(newcapacity <0)新しいIllegalStateException( "ごめん、Deque Too Big")を投げます。 object [] a = new object [newcapacity]; System.ArrayCopy(Elements、P、A、0、R); System.ArrayCopy(Elements、0、A、R、P);要素=(e [])a; head = 0;テール= n; } public e removeFirst(){e x = pollfirst(); if(x == null)新しいnosuchelementexception(); xを返します。 } public e pollfirst(){int h = head; e result = elements [h]; //要素はnullですdequeが空の場合(result == null)nullを返します。要素[h] = null; //アレイのこの位置をNULLにリセットして、便利なごみ収集を行います。 head =(h + 1)&(elemention.length -1); //ヘッドの値を逆にします。これは、スタックのポインターを1つのグリッドに移動するのと同等です。たとえば、12-> 13戻り結果。 } public e peekfirst(){return elements [head]; //要素[head]がdequeの場合はnullです}上記はこの記事に関するものです。誰もがJavaプログラミングを学ぶことが役立つことを願っています。