2012-12-20 20 views
11

Yığınlar vektörü uzatırsa, bu yığınların senkronize edildiği anlamına mı geliyor? Vektör Java docs yeni koleksiyon uygulamaları aksineYığını genişletir Vector

den

Not Vektör senkronize edilir.

cevap

12

Evet, senkronize edilir, ancak Javadocs göre bunun yerine bir Stack bir Deque tercih edilmelidir. Stack Javadocs kaynaktan

:

LIFO küme işlemleri daha tam ve tutarlı bir dizi Bu sınıfta tercih kullanılmalıdır deque arabirim ve uygulamaları tarafından sağlanan olup. Örneğin:

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

+1

ve şüphe durumunda [koda bakınız] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Stack.java) (* openjdk only;)) – soulcheck

+0

Neden LinkedList'i kullanmıyorsunuz? ArrayDeque, Deque uygulamasının bir uygulamasıdır, ancak Vector, List –

3

Evet, Vector miras yöntemler Yığın senkronize kalır. Kendi Stack yöntemleri peek, pop, arama Stack içinde senkronize edilir. Stack.push ve Stack.empty yöntemler senkronize edilmez, ancak

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

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

iki yöntem de Vector'ün senkronize yöntemler dolayısıyla Stack.empty ve Stack.push parçacığı için güvenlidir çağrıda bulunuyorlar.

+0

+ 1'in bir uygulamasıdır. Bence bu doğru. Vektörü genişletmenin kendisini yığın haline getirdiğini düşünmüyorum. Yöntemler nasıl tanımlanır. – kosa

+0

Doğru, senkronize edilebilir bir sınıf değil, yöntemleri –