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 Vectorve a ArrayListneredeyse eşdeğerdir. Fark Vector, a'ya erişimin senkronize edilmişken, a'ya erişimin senkronize ArrayListolmamasıdır. Bunun anlamı, Vectorbir 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.synchronizedListişlevi senkronize bir liste oluşturmak, böylece size eşdeğer bir elde Vector.
VectorBir 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.
Vectorolması 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.
ArrayListve Vectorher ikisi de Liste arabirimini uygular ve ekleme sırasını korur.Ancak ArrayListve Vectorsı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.
VectorElemanlar 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:
