Yanıtlar:
farklılıklar
Vektörleri kullanmak için özel bir gereksinim yoksa ArrayLists kullanın.
Senkronizasyon
Birden fazla iş parçacığı aynı anda bir ArrayList'e erişiyorsa, listeyi yapısal olarak veya yalnızca bir öğeyi değiştiren kod bloğunu harici olarak senkronize etmeliyiz. Yapısal değişiklik, öğelerin listeden eklenmesi veya silinmesi anlamına gelir. Mevcut bir elemanın değerinin ayarlanması yapısal bir değişiklik değildir.
Collections.synchronizedList
listeye yanlışlıkla senkronize olmayan erişimin önüne geçmek için normalde listenin oluşturulduğu sırada kullanılır.
Veri büyümesi
Dahili olarak, hem ArrayList hem de Vector, bir Array kullanarak içeriklerini tutar. Bir öğe bir ArrayList veya Vector öğesine eklendiğinde, nesnenin odadan çıkması durumunda dahili dizisini genişletmesi gerekir. ArrayList, dizi boyutunu yüzde 50 oranında artırırken, Vector varsayılan olarak dizisinin boyutunu iki katına çıkarır.
Belgelerin dediği gibi, a Vector
ve a ArrayList
neredeyse eşdeğerdir. Fark Vector
, a'ya erişimin senkronize edilmişken, a'ya erişimin senkronize ArrayList
olmamasıdır. Bunun anlamı, Vector
bir seferde yalnızca bir iş parçacığının yöntemleri çağırabilmesidir ve kilidi edinmede hafif bir ek yük vardır; an kullanırsanız ArrayList
, durum böyle değil. Genel olarak ArrayList
; tek iş parçacıklı durumda daha iyi bir seçimdir ve çok iş parçacıklı durumda kilitleme üzerinde daha iyi kontrol elde edersiniz. Eşzamanlı okumalara izin vermek ister misiniz? İnce. On yazlık bir toplu iş için bir eşitleme yapmak ister misiniz? O da iyi. Sonunda biraz daha fazla bakım gerektiriyor, ancak muhtemelen ne istiyorsun. Ayrıca, bir ArrayList'iniz varsa,Collections.synchronizedList
işlevi senkronize bir liste oluşturmak, böylece size eşdeğer bir elde Vector
.
Vector
Bir olan kırık olduğu sınıf değil o "senkronize" olma ve rağmen ÅŸan sadece öğrenciler ve diğer deneyimsiz programcılar tarafından kullanılır.
ArrayList
profesyoneller ve deneyimli programcılar tarafından kullanılan go-to List uygulamasıdır.
İş parçacığı Güvenli Liste uygulaması isteyen profesyoneller a CopyOnWriteArrayList
.
Vector
olması amaçlanmıştır , ancak aslında iş parçacığı güvenli değil * yapan bir tasarım kusuru vardır, Temelde itiraz bir sınıftır. Bazı nedenlerden dolayı, üniversiteler vs bu haberi duymamış ve hala kullanımını savunmaktadır.
ArrayList
daha yeni ve% 20-30 daha hızlı.
Açıkça görünen bir şeye ihtiyacınız yoksa Vector
,ArrayList
20-30% faster
?
Vector ve ArrayList arasında 2 büyük fark vardır.
Vektör varsayılan olarak senkronize edilir ve ArrayList değildir. Not: arraylist nesnesini Collections.synchronizedList () yöntemine ileterek ArrayList'i de senkronize edebilirsiniz. Senkronize edilmiş araçlar: herhangi bir yan etkisi olmayan çoklu dişlerle kullanılabilir.
ArrayLists, yeni öğe için alan yeterli olmadığında önceki boyutun% 50'si kadar büyür; Vector, yeni gelen öğe için yer olmadığında, önceki boyutun% 100'ü kadar büyür.
Bunun dışında, programlama çabası açısından aralarında bazı pratik farklılıklar vardır:
Hangisi ne zaman kullanılır?
Not : Arraylist% 100 büyüyor olsa da, başlangıç aşamalarında yeterli bellek ayırdığınızdan emin olmak için bunu ensurecapacity () yöntemiyle önleyebilirsiniz.
Umarım yardımcı olur.
ArrayList
ve Vector
her ikisi de Liste arabirimini uygular ve ekleme sırasını korur.Ancak ArrayList
ve Vector
sınıflar arasında birçok fark vardır ...
ArrayList
senkronize edilmedi.ArrayList
öğe sayısı kapasitesinden fazlaysa geçerli dizi boyutunun% 50'sini artırır.ArrayList
eski bir sınıf değil, JDK 1.2'de tanıtıldı.ArrayList
senkronize olmadığı için hızlıdır.ArrayList
elemanları taramak için Iterator arabirimini kullanır.Vector
senkronize edilir.Vector
% 100'lük artışlar, toplam öğe sayısı kapasitesinden fazla ise dizi boyutunu iki katına çıkarır.Vector
eski bir sınıftır.
Vector
yani çok iş parçacıklı ortamda senkronize olduğundan yavaştır, mevcut iş parçacığı nesne kilidini serbest bırakana kadar diğer iş parçacıklarını çalıştırılabilir veya çalıştırılamaz durumda tutar.
Vector
Elemanlar arasında geçiş yapmak için Numaralandırma arayüzünü kullanır. Ancak Iterator'ı da kullanabilir.
Ayrıca Bakınız: https://www.javatpoint.com/difference-between-arraylist-and-vector
Temel olarak hem ArrayList hem de Vector, dahili Nesne Dizisi kullanır.
ArrayList: ArrayList sınıfı AbstractList'i genişletir ve List arabirimini ve RandomAccess'i (işaret arabirimi) uygular. ArrayList gerektiğinde büyüyebilen dinamik dizileri destekler. Bize elementler üzerinde ilk iterasyon verir. ArrayList, dahili Object Array kullanır; varsayılan 10 başlangıç boyutuyla oluşturulurlar. Bu boyut aşıldığında, koleksiyon otomatik olarak varsayılan boyutun yarısına çıkar (15).
Vektör: Vektör ArrayList'e benzer, ancak farklar senkronize edilir ve varsayılan başlangıç boyutu 10'dur ve boyutu aşıldığında orijinal boyutun iki katına çıkar, yani yeni boyut 20 olacaktır. Vektör tek sınıftır RandomAccess uygulamak için ArrayList dışında. Vector dört yapıcıdan birinin iki parametre almasını sağlar Vector (int initialCapacity, int capacIncrement) kapasiteIncrement, vektör taştığında kapasitenin artırılacağı miktardır, dolayısıyla yük faktörü üzerinde daha fazla kontrole sahiptir.
Diğer bazı farklılıklar: