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.
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.
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>();
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.
+1. Ich denke, das ist richtig. Ich glaube nicht, dass der Extending Vektor sich Stack Stack synchronisiert. So werden Methoden definiert. – kosa
Richtig, es kann keine Klasse synchronisiert werden, sondern ihre Methoden –
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
Warum LinkedList nicht verwenden? ArrayDeque ist eine Implementierung von Deque, aber Vector ist eine Implementierung von List –