CodeGym /Java Blogu /Rastgele /java vektörü
John Squirrels
Seviye
San Francisco

java vektörü

grupta yayınlandı
Muhtemelen Java'da zaten dizilerle karşılaşmışsınızdır ve ana dezavantajlarından birinin boyut sabitliği olduğunu biliyorsunuzdur. Belirli bir boyutta bir dizi oluşturduktan sonra bunu daha sonra değiştiremezsiniz. Java dilinde bu sorunu çözen birkaç Java Koleksiyonu çerçeve sınıfı vardır. Bunlardan biri Java Vektör Sınıfıdır. Bu makalede tartışılacaktır.

Vektör Sınıfı Nedir?

Önsözde yazdığımız gibi, Java Collection Framework'ün Vector sınıfı, dizilerin statik boyutu sorununu ortadan kaldırır. Java Vector bir tür dinamik dizidir ve boyutu büyüyüp küçülebilir. Vector toplama sınıfını kullanarak , bir grup öğeyi basit nesneler olarak depolayabilir ve bunları çeşitli yöntemlerle işleyebiliriz. Vector sınıfı, java.util paketinden edinilebilir . Bu nedenle, dizinin boyutunu önceden bilmiyorsanız veya programın ömrü boyunca boyutları değiştirebilen bir "diziye" ihtiyacınız varsa, Java'daki Vector kullanılabilir. Hemen söylenmelidir ki, Vectorclass zaten oldukça eski ve daha sonra, çoğu durumda onun yerini alabilecek koleksiyonlar ortaya çıktı. Java Vector'un popüler "analoğu" ArrayList sınıfıdır. Bu sınıfların birbirinden en önemli farkı Vector'un senkronize olması, ArrayList'in ise senkronize olmamasıdır. Bu iki sınıf arasındaki diğer farklardan ve Vector sınıfının daha modern analoglarından biraz sonra “Vector sınıfının nesi var” bölümünde konuşacağız .

Java Vektör Yöntemleri

İşte Java Vektör Yöntemleri:
  • void add(int index, Object element) belirtilen elemanı vektörün belirtilen konumuna ekler.

  • boolean add(Object o) belirtilen öğeyi vektörün sonuna ekler.

  • boolean addAll(Collection c), belirtilen koleksiyondaki tüm öğeleri, belirtilen koleksiyon yineleyici tarafından döndürüldükleri sırayla vektörün sonuna ekler.

  • boolean addAll(int dizini, Koleksiyon c) belirtilen Koleksiyondaki tüm öğeleri belirtilen konumdaki vektöre ekler.

  • void addElement(Object obj), belirtilen bileşeni bu vektörün sonuna ekleyerek boyutunu bir artırır.

  • int kapasite() bu vektörün geçerli kapasitesini döndürür.

  • void clear() bu vektördeki tüm öğeleri kaldırır.

  • Object clone() bu vektörün bir klonunu döndürür.

  • boolean include(Object öğesi), belirtilen nesnenin bu vektörde bir bileşen olup olmadığını test eder.

  • boolean includeAll(Collection c), vektör belirtilen Koleksiyonun tüm öğelerini içeriyorsa true değerini döndürür.

  • void copyInto(Object[] anArray) bu vektörün bileşenlerini belirtilen diziye kopyalar.

  • Object elementAt(int index), belirtilen dizindeki bileşeni döndürür.

  • Enumeration elements(), bu vektörün bileşenlerinin bir listesini döndürür.

  • voidsureCapacity(int minCapacity) , gerekirse, en az minimum kapasite bağımsız değişkeni tarafından verilen bileşen sayısını tutabilmesini sağlamak için bu vektörün kapasitesini artırır.

  • boolean equals(Object o) belirtilen nesneyi bu vektörle karşılaştırır.

  • Object firstElement(), bu vektörün ilk bileşenini (0 dizinindeki öğe) döndürür.

  • Object get(int index), bu vektörde belirtilen konumdaki öğeyi döndürür.

  • int hashCode(), bu vektör için karma kod değerini döndürür.

  • int indexOf(Object öğesi), equals yöntemini kullanarak eşitliği test ederek, verilen bağımsız değişkenin ilk geçtiği yeri arar.

  • int indexOf(Object öğesi, int index) , dizinden başlayarak verilen bağımsız değişkenin ilk geçtiği yeri arar ve equals yöntemini kullanarak eşitliği test eder.

  • void insertElementAt(Object obj, int index) belirtilen dizindeki bu vektöre bir bileşen olarak belirtilen nesneyi ekler.

  • boolean isEmpty() bu vektörü eksik bileşenler için test eder.

  • LastElement() nesnesi, vektörün son bileşenini döndürür.

  • int lastIndexOf(Object öğesi), belirtilen nesnenin bu vektördeki son oluşumunun dizinini döndürür.

  • int lastIndexOf(Object öğesi, int index) belirtilen dizinden başlayarak belirtilen nesneyi geriye doğru arar ve dizini ona döndürür.

  • Object remove(int index), bu vektörde belirtilen konumdaki elemanı kaldırır.

  • boolean remove(Object o), belirtilen öğenin bu vektördeki ilk örneğini kaldırır. Vektör bir eleman içermiyorsa değişmez.

  • boolean removeAll(Collection c), belirtilen Koleksiyonda yer alan vektördeki tüm öğeleri kaldırır.

  • void removeAllElements(), vektördeki tüm bileşenleri kaldırır ve boyutunu sıfıra ayarlar.

  • boolean removeElement(Object obj), argümanın ilk (en düşük dizin) oluşumunu bu vektörden kaldırır.

  • void removeElementAt(int dizini), dizindeki bir öğeyi kaldırır.

  • korumalı geçersiz removeRange(int fromIndex, int toIndex), dizini fromIndex, dahil ve toIndex arasında olan tüm öğeleri bu Listeden özel olarak kaldırır.

  • booleantaintainAll(Collection c) yalnızca belirtilen Koleksiyonda yer alan vektördeki öğeleri tutar.

  • Object set(int index, Object element), bu vektörde belirtilen konumdaki elemanı belirtilen eleman ile değiştirir.

  • void setElementAt(Object obj, int index) bileşeni, verilen nesne olarak bu vektörün belirtilen dizinine ayarlar.

  • void setSize(int newSize) bu vektörün boyutunu ayarlar.

  • int size(), bu vektördeki bileşenlerin sayısını döndürür.

  • List subList(int fromIndex, int toIndex), bu Listenin yalnızca fromIndex, dahil ve toIndex arasındaki bölümünün bir temsilini (görünümü) döndürür.

  • Object[] toArray(), bu vektörün tüm öğelerini doğru sırada içeren bir dizi döndürür.

  • Object[] toArray(Object[] a), bu vektörün tüm öğelerini doğru sırada içeren bir dizi döndürür; döndürülen dizinin yürütme türü, belirtilen dizinin türüdür.

  • String toString(), her öğenin bir dize temsilini içeren bu vektörün bir dize temsilini döndürür.

  • void trimToSize(), bu vektörün kapasitesini vektörün geçerli boyutuna göre kırpar.

Java Vektör Örneği


import java.util.Vector;

public class VectorExample {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       //adding some vector elements
       vector.add("Johnny");
       vector.add("Ivy");
       vector.add("Ricky");
       System.out.println(vector); 
       
       //adding more vector elements       
       vector.add("Johnny");
       vector.add("Paul");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Johnny"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Johnny", 1));
       vector.clear(); //deleting all vector elements
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
Bu programın çıktısı aşağıdadır:
boş vektörün boyutu = 0 [Johnny, Ivy, Ricky] [Johnny, Ivy, Ricky, Johnny, Paul] vektörün boyutu = 5 vektörün ilk elemanı = Johnny 0 3 temizlendikten sonra vektörün boyutu yöntem = 0

Vector Class'ın nesi var?

Java Vector sınıfının belgelerine göre , programınızda güvenli bir uygulamaya ihtiyacınız yoksa, Vector yerine ArrayList kullanmanız önerilir (Collection Framework daha etkili katılımcı). Vector yerine ArrayList sınıfını kullanarak yukarıdaki örneği biraz değiştirelim .

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

       public static void main(String[] args) {
           List vector = new ArrayList();
           //Vector vector = new Vector();
           System.out.println("the size of the empty vector = " +  vector.size());
           vector.add("Johnny");
           vector.add("Ivy");
           vector.add("Ricky");
           System.out.println(vector);
           vector.add("Johnny");
           vector.add("Paul");
           System.out.println(vector);
           System.out.println("the size of the vector = " +  vector.size());
           //System.out.println("the first element of the vector = " + vector.firstElement());

           //here the program will print out the first appearance of "Johnny" element
           System.out.println(vector.indexOf("Johnny"));
           //program will print out the first appearance of "Johnny" element starting from the element 1
           //System.out.println(vector.indexOf("Johnny", 1));
           vector.clear();
           System.out.println("the size of the vector after clear method = " +  vector.size());

       }
   }
Satırı vector.indexOf("Johnny", 1) ile yorumladık çünkü ArrayList sınıfında bu varyasyonda böyle bir yöntem yok . Aynı nedenle, vector.firstElement() satırına yorum yapılmadı. Diğer tüm açılardan, program ilkiyle aynı sonucu verir. Elbette böyle bir örnekte ArrayList'in Vector'den neden daha iyi olduğu net değil . Bu, örneğin iş parçacıkları hakkında daha fazla bilgi gerektirir. Nedenlerini burada sıralıyoruz. İlk olarak, Vector sınıfı senkronize olmasına rağmen, bu garip görünse de tamamen güvenli olarak adlandırılamaz. Gerçek şu ki Vector , tüm Vector'u değil, her işlemi senkronize eder.örneğin kendisi. Bu, bireysel işlemler yerine tüm işlem setini senkronize etmeniz gereken programlarda bir sorun olabilir. Diyelim ki, bir iş parçacığı bir vektör üzerinde yineleniyorsa ve başka bir iş parçacığı vektörün bir örneğini yapısal olarak değiştiriyorsa, yineleyici bir ConcurrentModificationException fırlatır . Farklı işlemler gerçekleştirirlerse iki iş parçacığının bir Vector örneğiyle aynı anda çalışabileceği ortaya çıktı . İkincisi, Vektörsınıf, nesnelerinin yeniden boyutlandırılabilir bir diziye ve senkronizasyona sahip olması nedeniyle en iyi performansa sahip değildir. Bu kombinasyon, senkronizasyon gerekli olsun ya da olmasın, engelleme işlemleri için ek yük anlamına gelir. Elbette, bu performansı etkiler. Ek olarak, vektörü her işlemde senkronize etmek, her işlem için tekrar tekrar bir kilit elde edeceğimiz için performans üzerinde olumsuz bir etkiye sahiptir. Sınıfın tüm örneği senkronize edildiyse, kilit de bir kez alınır ve bu çok daha verimli olur. Üçüncüsü, Vector bazı eski yöntemleri destekler. Örneğin elementler(). Bu yöntem, vektörün bileşenlerinin bir listesini döndürür. Programcılar en çok Numaralandırma için Iterator veya ListIterator kullanır ve bunun birkaç nedeni vardır. Özellikle Numaralandırmanın tanımlanmış bir remove() yöntemi yoktur , bu da listenin yineleme sırasında yapısal olarak değiştirilemeyeceği anlamına gelir. Ayrıca, ListIterator'dan farklı olarak, Numaralandırma çift yönlü erişim sunmaz. Gördüğünüz gibi, Vector'in epeyce sorunu var. Hala List arabiriminin iş parçacığı açısından güvenli bir uygulamasına ihtiyacınız varsa? Bu durumda ArrayList yardımcı olmaz, ancak örneğin Vector yerine CopyOnWriteArrayList sınıfını kullanabilirsiniz ; ArrayList'in iş parçacığı açısından güvenli bir değişkeni olarak konumlandırılmıştır. ArrayList'i Collections synchronizedList() yöntemini kullanarak da senkronize edebilirsiniz .

Vektörün gerçekten bazı sorunları var... neden hala Java'da ve neden öğretilmesi gerekiyor?

Şu soru ortaya çıkıyor: neden Vector sınıfını inceliyoruz ? Ve neden henüz Java'dan kaldırılmadı? Gerçek şu ki, Java geriye dönük uyumluluk ilkesini benimsiyor. Bu, yıllar önce yazılan tüm eski kodların Java'nın modern sürümleri tarafından anlaşılacağı anlamına gelir. Ek olarak, Java ortamında on yıllardır desteklenen epeyce kurumsal düzeyde uygulama vardır. Çalışmalarınızda böyle bir "dinozor" ile uğraşmak zorunda kalmanız oldukça olasıdır, bu nedenle etkisiz eski sınıflara sahip kodlar gibi sürprizlere hazırlıklı olmanız gerekir.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION