web-dev-qa-db-ja.com

Java Stack Push()とadd()

私はStackを使用しようとしていますが、用語に少し混乱しています。

Java docのとおり、StackクラスにはPush(E e)しかないことがわかりました。

また、Vectorクラスから継承されたメソッドとしてadd(E e)およびaddAll(Collection<? extends E> c)があります。

それらは同じ機能を持っていますか、それともPush(...)を使用してStackオブジェクトに要素を挿入する方が良いですか?.

つまり、add(...)ではなくPush(...)を使用すると問題が発生しますか?

Kalyanaraman Santhanam:

編集:Push(...)の代わりにadd(...)を使用すると問題が発生しますか?

addListインターフェイスとStackの一部であるため、間違いなく問題は発生しませんが、コードと他のプログラマによる意図。 Pushメソッドは、Stackオブジェクトを使用していることの手掛かりを彼らに与えます。彼らは何から期待できるかを確実に知っています。また、Pushの戻り値はaddとは異なることに注意してください(前者には「プッシュされたオブジェクト」タイプがあり、後者にはboolean応答しかありません)。

20
rook

彼らは同じです。

JavaDoc から:

アイテムをこのスタックの一番上にプッシュします。これは以下とまったく同じ効果があります。

addElement(item)
3
Frank

(申し訳ありませんが、私の英語が悪い場合、私はMXから来ました)。

理論的には、addはすべてのジェネリッククラスのメソッドであるため、同じです。しかし、スタックを使用しているため、Pushを使用することをお勧めします。「add」の代わりに「Push」メソッドを使用すると、もう少し理解します...

3

Stackを使用している場合、Push()を使用する必要があります。これは、要素をスタックに追加する標準的な方法であるためです(Stackのデータ構造の考え方による) )。これは、「スタックの一番上」が、Push()したアイテムであることを意味します。

Stackの先頭からのみ追加と削除を行う必要があります。データを追加する他の方法(中央または末尾に追加)が必要と思われる場合は、Stackを使用しないことをお勧めしますコードが理解しにくくなるためです。

編集:(質問の編集を反映)すでに述べたように、私はnotStackを扱っていた場合、add()が表示されることを期待します。 add()Stackを使用するための標準構文ではありませんが、Push()はそうです。継承された関数が特に必要でない限り、javadocの本体で定義された関数のみを使用することをお勧めします。

1
ryaanwells

コーディングの質問を試行中に最近遭遇したもの(実際に同じ質問を検索するようになった状況)は、stack.add(stringオブジェクト)を使用すると、コードが時間制限を超えていました。 .addを.Push、つまりstack.Push(string object)に変更したため、問題は解決しました。文字通り、私は何も変更していません(.add-> .Pushを除く)、そして私のコードは時間内に実行されました!

0
MGupt

うん、私はそれらを使用する上でPush()とadd()メソッドの間に大きな違いを見つけることができません。

0
RAJNISH YADAV

みんなが言ったように、「プッシュ」と同じ効果があります。一部は尋ねるかもしれませんが、なぜですか?私は最近この主題を読みました、そしてそれは「最小の驚きの原則」の原則の違反であると言っていました。したがって、APIの設計上の欠陥のようなものであり、大きな問題ではありません。これは私たちに教えてくれます、ソフトウェア、フレームワーク、APIなどは完璧ではありません。すべてに独自の欠陥があります。

0
LazyX

継承の問題がすべてです。それがStackである場合は、Push()を使用して明確にし、モデルに従う必要があります。しかし、実際にはJava SE仕様から:

アイテムをこのスタックの一番上にプッシュします。これは以下とまったく同じ効果があります。 addElement(item)

0
rook

唯一の違いは戻り値の型です

System.out.println(stack.Push("1"));

Output : 1

System.out.println(stack.add("2"));

Output : true

ただし、スタックにはPushメソッドを使用することをお勧めします

0
SDC

私の分析から、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]
*
0
Rajesh Waran