私はStack
を使用しようとしていますが、用語に少し混乱しています。
Java docのとおり、Stack
クラスにはPush(E e)
しかないことがわかりました。
また、Vector
クラスから継承されたメソッドとしてadd(E e)
およびaddAll(Collection<? extends E> c)
があります。
それらは同じ機能を持っていますか、それともPush(...)
を使用してStack
オブジェクトに要素を挿入する方が良いですか?.
つまり、add(...)
ではなくPush(...)
を使用すると問題が発生しますか?
Kalyanaraman Santhanam:
編集:Push(...)の代わりにadd(...)を使用すると問題が発生しますか?
add
はList
インターフェイスとStack
の一部であるため、間違いなく問題は発生しませんが、コードと他のプログラマによる意図。 Push
メソッドは、Stack
オブジェクトを使用していることの手掛かりを彼らに与えます。彼らは何から期待できるかを確実に知っています。また、Push
の戻り値はadd
とは異なることに注意してください(前者には「プッシュされたオブジェクト」タイプがあり、後者にはboolean
応答しかありません)。
(申し訳ありませんが、私の英語が悪い場合、私はMXから来ました)。
理論的には、addはすべてのジェネリッククラスのメソッドであるため、同じです。しかし、スタックを使用しているため、Pushを使用することをお勧めします。「add」の代わりに「Push」メソッドを使用すると、もう少し理解します...
Stack
を使用している場合、Push()
を使用する必要があります。これは、要素をスタックに追加する標準的な方法であるためです(Stack
のデータ構造の考え方による) )。これは、「スタックの一番上」が、Push()
したアイテムであることを意味します。
Stack
の先頭からのみ追加と削除を行う必要があります。データを追加する他の方法(中央または末尾に追加)が必要と思われる場合は、Stack
を使用しないことをお勧めしますコードが理解しにくくなるためです。
編集:(質問の編集を反映)すでに述べたように、私はnotStack
を扱っていた場合、add()
が表示されることを期待します。 add()
はStack
を使用するための標準構文ではありませんが、Push()
はそうです。継承された関数が特に必要でない限り、javadoc
の本体で定義された関数のみを使用することをお勧めします。
コーディングの質問を試行中に最近遭遇したもの(実際に同じ質問を検索するようになった状況)は、stack.add(stringオブジェクト)を使用すると、コードが時間制限を超えていました。 .addを.Push、つまりstack.Push(string object)に変更したため、問題は解決しました。文字通り、私は何も変更していません(.add-> .Pushを除く)、そして私のコードは時間内に実行されました!
うん、私はそれらを使用する上でPush()とadd()メソッドの間に大きな違いを見つけることができません。
みんなが言ったように、「プッシュ」と同じ効果があります。一部は尋ねるかもしれませんが、なぜですか?私は最近この主題を読みました、そしてそれは「最小の驚きの原則」の原則の違反であると言っていました。したがって、APIの設計上の欠陥のようなものであり、大きな問題ではありません。これは私たちに教えてくれます、ソフトウェア、フレームワーク、APIなどは完璧ではありません。すべてに独自の欠陥があります。
継承の問題がすべてです。それがStack
である場合は、Push()
を使用して明確にし、モデルに従う必要があります。しかし、実際にはJava SE仕様から:
アイテムをこのスタックの一番上にプッシュします。これは以下とまったく同じ効果があります。 addElement(item)
唯一の違いは戻り値の型です
System.out.println(stack.Push("1"));
Output : 1
System.out.println(stack.add("2"));
Output : true
ただし、スタックにはPushメソッドを使用することをお勧めします
私の分析から、addメソッドとPushメソッドの出力に違いは見られませんでした。以下のコードと出力を参照してください。
import Java.util.Stack; public class StackDemo { static Stack stack = new Stack(); public static void main(String [] args){ // TODO自動生成されたメソッドスタブ add(10); add (20); add(30); print(); Push(40); print(); pop() ; print(); Push(50); print(); } static void print(){ System.out.println(stack); } static void add(int item){ stack .add(item); } static void Push(int item){ stack.Push(item); } static void peek(){ System.out.println(stack.peek()); } static int pop(){ return stack.pop(); } }
*
[10, 20, 30]
[10, 20, 30, 40]
[10, 20, 30]
[10, 20, 30, 50]
*