Doporučená, 2024

Redakce Choice

Rozdíl mezi ArrayList a Vector v Javě

ArrayList a Vector jsou třídy v hierarchii Collection Framework. ArrayList a Vector, obojí se používá k vytvoření dynamického pole objektů, kde pole může roste ve velikosti podle potřeby. Existují dva základní rozdíly, které odlišují ArrayList a Vector je, že vektor patří do tříd Legacy, které byly později reengineered podporovány třídy tříd, zatímco ArrayList je standardní třídou kolekce. Dalším důležitým rozdílem je, že ArrayList je na druhé straně nesynchronizovaný; Vektor je synchronizován.

Podívejme se na některé další rozdíly pomocí srovnávací tabulky uvedené níže.

Srovnávací graf

Základ pro porovnáníArrayListVektor
ZákladníTřída ArrayList není synchronizována.Třída vektoru je synchronizována.
Starší třídaArrayList je standardní třída kolekce.Vektor je prvotřídní třída, přepracovaná tak, aby podporovala třídu kolekce.
Deklarace třídytřída ArrayListtřídy Vektor
PřemístěníNení-li zadán, ArrayList je zvýšen o polovinu jeho velikosti.Pokud není zadán, vektor se zvětší na dvojnásobek jeho velikosti.
VýkonProtože ArrayList je nesynchronizovaný, pracuje rychleji než Vector.Protože je vektor synchronizován, pracuje pomaleji než ArrayList.
Výčet / IterátorArrayList používá rozhraní Iterator pro procházení objektů uložených v ArrayList.Vektor používá rozhraní Enumeration a Iterator k procházení objektů uložených ve vektorech.

Definice ArrayList

ArrayList patří do seznamu standardních tříd kolekce. Třída ArrayList je definována uvnitř balíku java.util, rozšiřuje třídu AbstractList, která je také standardní třídou kolekce, a implementuje také seznam, rozhraní definované v rozhraní Interface. V jazyce Java má standardní pole vždy pevnou délku. To znamená jednou vytvořené; není dynamicky růst nebo zmenšovat velikost. Měli byste tedy mít předchozí znalosti o délce pole, které používáte. Někdy se však může stát, že požadovaná délka bude odhalena za běhu tak, aby tento druh situace zvládla java.

ArrayList je třída používaná pro dynamické vytváření pole, které obsahuje odkazy na objekty. Toto pole by mohlo roste ve velikosti, jak bude potřeba. Prohlášení o třídě je následující:

 třída ArrayList 

Zde E určuje typ objektů, které bude pole držet. Vytvořené pole má proměnnou délku a zvětšuje a zmenšuje velikost, když jsou objekty přidány nebo odebrány ze seznamu.

ArrayList není synchronizován, to znamená, že na matici může pracovat současně více než jeden podproces. Pokud například jeden podproces přidává odkaz na pole na pole a jiný podproces současně odebírá odkaz na objekt ze stejného pole. Vytvoření dynamického pole pomocí třídy ArrayList:

 ArrayList S1 = new ArrayList (); System.out.println ("Počáteční velikost S1:" + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.println ("Po přidání S1 obsahuje:" + S1); System.out.println ("Velikost S1 po přidání:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Po odstranění S1 obsahuje:" + S1); System.out.println ("Velikost S1 po vymazání:" + S1.size ()); // Výstupní velikost S1: 0 Po přidání S1 obsahuje: [T, E, C, H]; Velikost S1 po přidání: 4 Po deleci S1 obsahuje: [E, H] Velikost S1 po deleci: 2 

Ve výše uvedeném kódu to můžete vidět; Vytvořil jsem pole objektů typu string. Přidal jsem některé objekty do pole S1 metodou add () a později odstranil některé objekty metodou remove (). Můžete pozorovat, pokud nezadáte počáteční velikost pole, které bude mít délku '0'. Jak můžete vidět, pole roste a zmenšuje se, když přidáváte a odstraňujete prvky.

Definice vektoru

Vektor je třída Legacy, která je reengineered, aby podporovala třídu kolekce v hierarchii Collection Collection. Třída vektoru je také definována v balíku java.util, rozšířená o třídu AbstractList a implementovaná rozhraním List . Třída Vector je deklarována následovně:

 třídy Vektor 

Zde E definuje typ objektu, který bude uložen v poli. Pole vytvořené pomocí třídy Vector má proměnnou délku. Pokud není přírůstek zadán, zvyšuje se dvojnásobek jeho velikosti. Pojďme pochopit vytvoření pole pomocí Vector.

 Vektor V = nový vektor (1, 1); V.addElement ("Tech"); V.addElement ("Rozdíly"); System.out.println ("Kapacita po 2 přidání:" + V.kapacita ()); V.addElement ("mezi"); V.addElement ("vektory"); System.out.println ("Aktuální kapacita:" + V.capacity ()); // Výstupní kapacita po 2 přídavcích: 2 Aktuální kapacita: 4 

Ve výše uvedeném kódu můžete vidět, že jsem se zejména zmínil o velikosti a přírůstku hodnoty v konstruktoru Vector respektive při deklaraci pole řetězců objektů. Proto můžete pozorovat, že jako limit pole končí, zvyšuje se o hodnotu poskytnutou konstruktoru během deklarace.

Klíčové rozdíly mezi ArrayList a vektory

  1. Více podprocesů by mohlo pracovat na ArrayList současně, proto je považováno za nesynchronizované . Na rozdíl od ArrayListu může na vektoru pracovat najednou pouze jedno vlákno; nazývá se synchronizován .
  2. V rané verzi Java by některé třídy a rozhraní poskytovaly metody pro ukládání objektů, které se nazývají Legacy tříd Vektor je jeden z Legacy třídy Java. Později byly tyto starší třídy reengineered, aby podporovaly třídu kolekce, zatímco třída ArrayList je standardní třídou kolekce.
  3. Když je limit pole plně využit a vedle vyčerpaného pole je přidán nový objekt, jeho velikost roste v obou případech, tj. V ArrayList stejně jako ve vektoru, ale rozdíl je v ArrayList, pokud není zadána velikost je zvýšena o 50% aktuálního pole, zatímco ve vektorovém poli je zdvojnásobena velikost, pokud hodnota přírůstku není zadána.
  4. Vektor používá Enumeration stejně jako Iterator pro přechod pole, zatímco ArrayList používá pouze iterátor pro procházení pole.
  5. Vzhledem k tomu, že ArrayList je nesynchronizovaný a mnoho podprocesů může na něm pracovat současně, jeho výkon je lepší než vektor, na kterém může pracovat současně pouze jedno vlákno.

Podobnosti:

  1. ArrayList a Vector jsou definovány v balíku java.util.
  2. ArrayList a Vector oba rozšiřují třídu AbsractList.
  3. ArrayList a Vector oba implementuje rozhraní seznamu.
  4. ArrayList a vektory se používají k vytvoření dynamického pole, které roste podle potřeby.
  5. ArrayList a Vector obě obsahují odkazy na objekty.

Závěr:

Závěrem říkám, že použití ArrayListu je lepší než používání Vectoru, protože to funguje rychleji a lépe.

Top