2012-12-20 16 views
11

Se le pile si estendono vettore significa che gli stack sono sincronizzati?Lo stack si estende Vector

nota da documenti Vector Java

A differenza delle nuove implementazioni di raccolta, vettore è sincronizzato.

risposta

12

Sì, è sincronizzato, ma secondo il Javadocs si dovrebbe preferire un Deque invece di un Stack.

Dal Stack Javadocs:

Una serie più completa e coerente di operazioni di stack LIFO è fornito dall'interfaccia Deque e sue implementazioni, che dovrebbe essere usato di preferenza per questa classe. Per esempio:

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

+1

e in caso di dubbio [guardare nel codice] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Stack.java) (* openjdk only;)) – soulcheck

+0

perché non utilizzare LinkedList? ArrayDeque è un'implementazione di Deque, ma Vector è un'implementazione di List –

3

Sì, metodi ereditati dal vettore rimangono sincronizzati in modalità Stack. I metodi Own Stack peek, pop, search sono sincronizzati in Stack. metodi Stack.push e Stack.empty non sono sincronizzati, ma

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

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

entrambi i metodi stanno chiamando sincronizzati metodi di Vector quindi Stack.empty e Stack.push sono thread-safe.

+0

+1. Penso che sia corretto. Non penso che l'estensione del vettore si renda sincronizzato allo stack. È come sono definiti i metodi. – kosa

+0

Esatto, non è possibile sincronizzare una classe ma i suoi metodi –