Przeanalizujmy kilka innych różnic za pomocą poniższej tabeli porównawczej.
Wykres porównania
Podstawa do porównania | ArrayList | Wektor |
---|---|---|
Podstawowy | Klasa ArrayList nie jest zsynchronizowana. | Klasa wektorowa jest zsynchronizowana. |
Starsza klasa | ArrayList jest standardową klasą kolekcji. | Wektor to starsza klasa, przeprojektowana w celu obsługi klasy kolekcji. |
Deklaracja klasy | klasa ArrayList | klasa wektor |
Realokacja | Jeś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 / Iterator | ArrayList 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
- 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 .
- 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.
- 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.
- Vector używa Enumeration oraz Iterator do przechodzenia przez tablicę, podczas gdy ArrayList używa tylko iteratora do przechodzenia przez tablicę.
- 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:
- ArrayList i Vector są zdefiniowane w pakiecie java.util.
- ArrayList i Vector rozszerzają klasę AbsractList.
- ArrayList i Vector implementują interfejs listy.
- ArrayList i Vectors są używane do tworzenia dynamicznej tablicy, która rośnie w miarę potrzeb.
- 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.