2012-12-20 5 views
11

Wenn Stacks Vektor erweitert bedeutet das, dass Stacks synchronisiert werden?Stack erweitert Vektor

Hinweis von Vector Java docs

Im Gegensatz zu dem neuen Kollektion Implementierungen wird Vector synchronisiert.

Antwort

12

Ja, es ist synchronisiert, sondern nach dem Javadocs sollten Sie einen Deque anstelle eines Stack bevorzugen.

Vom Stack Javadocs:

Ein vollständigen und konsistenten Satz von LIFO-Stapeloperationen ist durch die Deque-Schnittstelle zur Verfügung gestellt und ihre Implementierungen, die sollten zu dieser Klasse bevorzugt verwendet werden. Zum Beispiel:

Deque<Integer> stack = new ArrayDeque<Integer>();

+1

und im Zweifelsfall [siehe Code] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Stack.java) (* nur Openjdk;)) – soulcheck

+0

Warum LinkedList nicht verwenden? ArrayDeque ist eine Implementierung von Deque, aber Vector ist eine Implementierung von List –

3

Ja, von Vector geerbten Methoden bleiben in Stapel synchronisiert. Eigene Stack-Methoden peek, pop, search werden im Stack synchronisiert. Stack.push und Stack.empty Methoden nicht synchronisiert sind, aber

public boolean empty() { 
    return size() == 0; 
} 

public E push(E item) { 
    addElement(item); 
    return item; 
} 

beiden Methoden fordern Vectors synchronisierten Methoden daher Stack.empty und Stack.push sind threadsicher.

+0

+1. Ich denke, das ist richtig. Ich glaube nicht, dass der Extending Vektor sich Stack Stack synchronisiert. So werden Methoden definiert. – kosa

+0

Richtig, es kann keine Klasse synchronisiert werden, sondern ihre Methoden –