2013-04-13 16 views
15

Sto cercando di utilizzare Stack, ma sono leggermente confuso dalla terminologia.Java Stack push() vs add()

Trovo che la classe Stack abbia solo push(E e) come da documento Java.

E ha add(E e) e addAll(Collection<? extends E> c) come metodo ereditato dalla classe Vector.

Hanno la stessa funzionalità o è meglio utilizzare push(...) per inserire elementi nell'oggetto Stack.

In altre parole, si verificheranno problemi se utilizzo add(...) anziché push(...)?

+1

queste sono classi non molto usate. Cosa stai cercando di fare? – radai

+0

Uno sfortunato effetto collaterale dell'estensione da 'Vector', che non avrebbe dovuto essere eseguito. –

risposta

10

Kalyanaraman Santhanam:

Edit: Dovrò incontrare problemi se uso aggiungere (...) invece di push (...)?

Sicuramente, non si incontrano problemi, perché add fa parte della List interfaccia così come la Stack, ma si dovrebbe notare l'ulteriore leggibilità del codice e le vostre intenzioni in essa da parte di altri programmatori. Il metodo push darà loro la certezza che stanno usando l'oggetto Stack, sapranno sicuramente cosa aspettarsi da. Anche notare che push ha valore diverso rendimento rispetto add (il primo tipo ha "spinto oggetto" e il secondo solo una risposta boolean)

1

Sono uguali.

Dal JavaDoc:

Spinge un elemento su inizio di questa pila. Questo ha esattamente lo stesso effetto di :

addElement(item) 
+2

Ma non è addElement() e add() due diverse funzioni? –

+3

sì, è ... per favore leggi il JAVADoc, ecco perché ce l'abbiamo – Frank

0

Si tratta solo di questioni di eredità, se si tratta di un Stack è necessario utilizzare push() essere chiaro e seguire al modello. Ma, in realtà dalle specifiche Java SE:

Spinge un oggetto nella parte superiore di questa pila. Questo ha esattamente lo stesso effetto:addElement(item)

1

Se si utilizza un Stack allora dovreste usare push() in quanto questo è il modo standard per aggiungere elementi in uno stack (a causa della idea della struttura di dati di un Stack) . Ciò significa che il "top of the stack" è l'elemento che hai appena ed. push().

Si dovrebbe sempre e solo aggiungere e rimuovere dalla cima di un Stack e se pensate che avrete bisogno di altri modi di aggiungere i dati (aggiungere alla metà o alla fine), allora vi consiglio di non usare un Stack come farà il vostro codice più difficile da capire.

Edit: (riflettendo domanda di modifica) Come ho già detto, io non aspettare di vedere add() se avevo a che fare con un Stack. add() non è la sintassi standard per l'utilizzo di Stack, push(). Suggerirei di utilizzare solo le funzioni definite nel corpo principale di javadoc a meno che non si abbia specificamente bisogno di quelle ereditate.

1

(scusate se il mio inglese è male, io sono di MX).

Teoricamente, è la stessa cosa, perché add è un metodo di tutta la classe generica ... Ma è molto raccomandabile usare push, perché si sta usando uno stack e se si usa il metodo "push" invece di "aggiungere "forse capirai un po 'di più ...