まとめ
ベクターを学習した後、スタックの学習を開始します。スタックはシンプルで、ベクトルから継承します。学習方法は以前と同じです。まず、スタックを全体的に理解し、そのソースコードを学習します。最後に、例を介してそれを使用することを学びます。
スタックはスタックです。その特性は次のとおりです。
Java Toolkitのスタックは、Vector(Vector Queue)から継承されます。ベクトルは配列を介して実装されるため、これはリンクされたリストではなく配列を介してスタックも実装されることを意味します。もちろん、LinkedListをスタックとして使用することもできます。 「ベクターの詳細な紹介(ソースコード分析)およびJavaコレクションシリーズ06の使用例」では、ベクターのデータ構造が詳細に導入されており、スタックのデータ構造はここでは説明されません。
java.lang.object
↳java.util.abstractcollection<e>
↳java.util.abstractlist<e>
↳java.util.vector<e>
↳java.util.stack<e>
パブリッククラススタック<e>拡張vector <e> {}
スタックとコレクションの関係は次のとおりです。
Stackには、次のように、デフォルトのコンストラクターが1つしかありません。
スタック()
スタックのAPI
スタックはスタックであり、一般的に使用されるAPIは次のとおりです。
boolean empty()
同期したepeek()
同期したe pop()
eプッシュ(eオブジェクト)
同期されたINT検索(オブジェクトO)
ベクターからスタックして継承するため、ベクターのすべてのAPIも含まれています。
Stackのソースコードは非常に簡単です。以下で学びましょう。
パッケージJava.util; publicClass Stack <e> extends Vector <e> {//バージョンID。これはバージョンのアップグレードコントロールに使用されるため、ここで注意を払う必要はありません! private static final long serialversionuid = 1224463164541339165l; // constructor public stack(){} //プッシュ関数:stack public e push(e item)の上部に要素を保存(eアイテム){//スタックの上部に要素を保存します。 // addElement()の実装はvector.java addelement(item)にあります。返品アイテム。 } // pop関数:スタックの上部要素を返し、スタックのパブリック同期e pop(){e obj;から削除します。 int len = size(); obj = peek(); //スタックの上部要素を削除すると、removeElementat()はvector.java removeElementat(len -1)にあります。 OBJを返します。 } // PEEK関数:削除なしでスタックの上部要素を返します操作public同期e peek(){int len = size(); if(len == 0)を新しいemptystackexception(); // stackの上部要素を返し、elementat()はvector.javaに実装されています。 Return ElementAT(len -1); } //スタックが空であるかどうかのpublic boolean empty(){return size()== 0; } //スタック内の「要素o」の位置を見つけます:スタックの下部からスタックの上部まで、public同期INT検索(オブジェクトO){// ementsインデックスを取得し、ementAT()はvector.javaに実装されます。 int i = lastindexof(o); if(i> = 0){return size()-i; } return -1; }} (01)スタックは実際に配列を介して実装されます。
プッシュが実行されると(すなわち、要素をスタックに押し込む)、アレイの最後に要素を追加することによってです。
PEEKを実行すると(つまり、スタックの上部要素が削除され、削除が実行されません)、それは配列の端を返す要素です。
ポップを実行する場合(つまり、スタックの上部要素を取り出してスタックから要素を削除する場合)、配列の端にある要素を取り出してから、配列から要素を削除します。
(02)スタックはベクトルから継承されます。つまり、ベクトルが持つプロパティと関数の両方がStackを所有しています。
以下に、例を介してスタックを使用する方法を学びます
Import java.util.stack; Import java.util.iterator; Import Java.util.list;/*** @desc Stackのテストプログラム。一般的なAPIの使用法をテスト * * @Author Skywang */public class stacktest {public static void main(string [] args){stack stack = new stack(); // 1,2,3,4,5をスタックに追加します(int i = 1; i <6; i ++){stack.push(string.valueof(i)); } //トラバースを送信して、スタックiteratorthroundomaccess(stack)を印刷します。 //スタックと出力int pos = stack.search( "2")で「2」の位置を見つけます。 System.out.println( "2の投稿は次のとおりです。"+pos); // pupスタック上部要素の後、traverse stack.pop(); IteratorThroundRandomAccess(スタック); // PEEK STACK TOP要素の後、トラバーススタック文字列val =(string)stack.peek(); System.out.println( "peek:"+val); IteratorThroundRandomAccess(スタック); //イテレータを介してstack iteratorthroughtruterator(スタック)をトラバースします。 } / ** *クイックアクセスを介したトラバーススタックfor(int i = 0; i <list.size(); i ++){val =(string)list.get(i); System.out.print(val+""); } system.out.println(); } / ** * iteratorを介してスタックをトラバースする * / public static void iteratorthroughtreator(list list){string val = null; for(iterator iter = list.iterator(); iter.hasnext();){val =(string)iter.next(); System.out.print(val+""); } system.out.println(); }}実行結果:
1 2 3 4 5
2のポジションは次のとおりです
1 2 3 4
ピーク:4
1 2 3 4
1 2 3 4