Zalecane, 2024

Wybór Redakcji

Różnica między ArrayList i Vector w Javie

ArrayList i Vector są klasami w hierarchii kolekcji. ArrayList i Vector, oba są używane do tworzenia dynamicznej tablicy obiektów, w której tablica może rosnąć w zależności od potrzeb. Istnieją dwie podstawowe różnice, które odróżniają ArrayList od Vector, że Vector należy do klas Legacy, które zostały później przeprojektowane w celu obsługi klas kolekcji, podczas gdy ArrayList jest standardową klasą kolekcji. Inną ważną różnicą jest to, że ArrayList nie jest zsynchronizowany z drugiej strony; Wektor jest zsynchronizowany.

Przeanalizujmy kilka innych różnic za pomocą poniższej tabeli porównawczej.

Wykres porównania

Podstawa do porównaniaArrayListWektor
PodstawowyKlasa ArrayList nie jest zsynchronizowana.Klasa wektorowa jest zsynchronizowana.
Starsza klasaArrayList jest standardową klasą kolekcji.Wektor to starsza klasa, przeprojektowana w celu obsługi klasy kolekcji.
Deklaracja klasyklasa ArrayListklasa wektor
RealokacjaJeśli nie zostanie podana, ArrayList zostanie zwiększona o połowę.Jeśli nie jest określony, wektor jest zwiększany, aby podwoić jego rozmiar.
WydajnośćPonieważ ArrayList nie jest zsynchronizowany, działa szybciej niż wektor.Ponieważ Vector jest zsynchronizowany, działa wolniej niż ArrayList.
Wyliczenie / IteratorArrayList używa interfejsu Iteratora do przechodzenia przez obiekty przechowywane w ArrayList.Vector używa Enumeration oraz interfejsu Iteratora do przechodzenia przez obiekty przechowywane wektory.

Definicja ArrayList

ArrayList należy do listy standardowych klas kolekcji. Klasa ArrayList jest zdefiniowana w pakiecie java.util, rozszerza klasę AbstractList, która jest również standardową klasą kolekcji, a także implementuje List, interfejs zdefiniowany w interfejsach kolekcji. W Javie standardowa tablica ma zawsze stałą długość. Oznacza to, że raz stworzony; nie rośnie dynamicznie ani nie kurczy się. Tak więc powinieneś mieć wcześniejszą wiedzę na temat długości tablicy, której używasz. Ale czasami może się zdarzyć, że wymagana długość zostanie ujawniona w czasie wykonywania, więc aby poradzić sobie z taką sytuacją, Java wprowadziła ArrayList.

ArrayList jest klasą używaną do dynamicznego tworzenia tablicy przechowującej odniesienia do obiektów. Ta tablica może rosnąć w zależności od potrzeb. Deklaracja klasy jest następująca:

 klasa ArrayList 

Tutaj E określa typ obiektów, które będą przechowywane w tablicy. Utworzona tablica ma zmienną długość i zwiększa się i zmniejsza rozmiar, gdy obiekty są dodawane lub usuwane z listy.

ArrayList nie jest zsynchronizowany, co oznacza, że ​​więcej niż jeden wątek może działać w macierzy w tym samym czasie. Na przykład, jeśli jeden wątek dodaje odwołanie do obiektu do tablicy, a inny wątek usuwa odwołanie do obiektu z tej samej tablicy w tym samym czasie. Tworzenie tablicy dynamicznej za pomocą klasy ArrayList:

 ArrayList S1 = new ArrayList (); System.out.println ("Początkowy rozmiar S1:" + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.println ("Po dodaniu S1 zawiera:" + S1); System.out.println ("Rozmiar S1 po dodaniu:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Po skasowaniu S1 zawiera:" + S1); System.out.println ("Rozmiar S1 po skasowaniu:" + S1.size ()); // Wyjściowy Rozmiar początkowy S1: 0 Po dodaniu S1 zawiera: [T, E, C, H]; Wielkość S1 po dodaniu: 4 Po usunięciu S1 zawiera: [E, H] Rozmiar S1 po usunięciu: 2 

W powyższym kodzie widać to; Stworzyłem tablicę obiektów typu string. Dodałem kilka obiektów do tablicy S1 przy użyciu metody add (), a następnie usunąłem niektóre obiekty za pomocą metody remove (). Możesz zaobserwować, jeśli nie określisz początkowego rozmiaru tablicy, która będzie miała długość "0". Jak widać tablica rośnie i kurczy się w miarę dodawania i usuwania elementów.

Definicja wektora

Vector jest klasą Legacy, która została ponownie zaprojektowana w celu obsługi klasy kolekcji w hierarchii kolekcji Collection. Klasa vector jest również zdefiniowana w pakiecie java.util, rozszerzonym o klasę AbstractList i zaimplementowaną przez interfejs List . Klasa Vector jest zadeklarowana jako następująca:

 klasa wektor 

Tutaj E definiuje typ obiektu, który będzie przechowywany w tablicy. Tablica utworzona za pomocą klasy Vector ma zmienną długość. Zwiększa dwukrotnie jego rozmiar, jeśli przyrost nie jest określony. Rozumiem tworzenie macierzy za pomocą Vector.

 Wektor V = nowy wektor (1, 1); V.addElement ("Tech"); V.addElement ("Różnice"); System.out.println ("Pojemność po 2 dodaniu:" + V.capacity ()); V.addElement ("Między"); V.addElement ("Vectors"); System.out.println ("Current capacity:" + V.capacity ()); // Wydajność wyjściowa po dodaniu 2: 2 Aktualna pojemność: 4 

W powyższym kodzie widać, że szczególnie wymieniłem wielkość i wartość przyrostu odpowiednio w konstruktorze wektora, deklarując tablicę obiektów łańcuchowych. W związku z tym można zauważyć, że jako limit tablicy kończy się ona wzrasta o wartość podaną konstruktorowi podczas deklaracji.

Kluczowe różnice między ArrayList i Vectors

  1. Wiele wątków może działać w ArrayList w tym samym czasie, dlatego jest uważane za niezsynchronizowane . W przeciwieństwie do ArrayList, tylko jeden wątek może działać na wektorze naraz; stąd nazywa się Zsynchronizowany .
  2. We wczesnej wersji Javy niektóre klasy i interfejsy udostępniałyby metody do przechowywania obiektów, które były nazywane klasami Legacy Vector jest jedną z klas Java klasy Legacy. Później te starsze klasy zostały przeprojektowane w celu obsługi klasy Collection, podczas gdy klasa ArrayList jest standardową klasą kolekcji.
  3. Gdy limit tablicy jest w pełni wykorzystany i nowy obiekt jest dodawany obok wyczerpanej tablicy, jego rozmiar rośnie w obu przypadkach, np. W ArrayList, jak również w Vector, ale różnica jest taka, że ​​w ArrayList, jeśli nie określono rozmiaru jest zwiększany o 50% bieżącej tablicy, podczas gdy w tablicy Wektor jest podwojony, jeśli wartość przyrostu nie jest określona.
  4. Vector używa Enumeration oraz Iterator do przechodzenia przez tablicę, podczas gdy ArrayList używa tylko iteratora do przechodzenia przez tablicę.
  5. Ponieważ ArrayList jest niezsynchronizowany i wiele wątków może na nim działać, jego wydajność jest lepsza niż wektor, na którym może działać tylko jeden wątek.

Podobieństwa:

  1. ArrayList i Vector są zdefiniowane w pakiecie java.util.
  2. ArrayList i Vector rozszerzają klasę AbsractList.
  3. ArrayList i Vector implementują interfejs listy.
  4. ArrayList i Vectors są używane do tworzenia dynamicznej tablicy, która rośnie w miarę potrzeb.
  5. ArrayList i Vector przechowują odwołania do obiektów.

Wniosek:

Na koniec stwierdzam, że użycie ArrayList jest lepsze niż użycie Vectora, ponieważ działa szybciej i lepiej.

Top