Rozdíl mezi seznamem polí a vektorem v Javě

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 1 Smět 2024
Anonim
Rozdíl mezi seznamem polí a vektorem v Javě - Technologie
Rozdíl mezi seznamem polí a vektorem v Javě - Technologie

Obsah


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

Prozkoumejme některé další rozdíly pomocí níže uvedeného srovnávacího grafu.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Podobnosti
  5. Závěr

Srovnávací tabulka

Základ pro srovnáníArrayListVektor
ZákladníTřída ArrayList není synchronizována.Třída vektorů je synchronizována.
Starší třídaArrayList je standardní kolekce Collection.Vektor je stará třída, přepracovaná tak, aby podporovala třídu kolekce.
Prohlášení o třídětřída ArrayListtřída Vector
PřerozděleníPokud není uvedeno, ArrayList se zvýší o polovinu své velikosti.Pokud není zadán, vektor se zvýší na dvojnásobek jeho velikosti.
VýkonProtože ArrayList je nesynchronizovaný, pracuje rychleji než Vector.Protože je Vector synchronizován, pracuje pomaleji než ArrayList.
Výčet / IterátorArrayList používá rozhraní Iterator k procházení objektů uložených v ArrayList.Vektor používá Enumeraci a rozhraní Iterátoru 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ř java.util balíček, rozšiřuje AbstractList třída, která je také standardní třídou kolekce, a také implementuje Seznam, rozhraní definované v kolekcích rozhraní. V Javě má ​​standardní pole vždy pevnou délku. To znamená jednou vytvořené; dynamicky se nezvětšuje ani zmenšuje. 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 je požadovaná délka odhalena za běhu, takže pro zvládnutí této situace java představil ArrayList.

ArrayList je třída používaná pro dynamické vytváření pole, které obsahuje odkazy na objekty. Toto pole by se mohlo podle potřeby zvětšit. Prohlášení o třídě je následující:


třída ArrayList

Zde E určuje typ objektů, které bude pole obsahovat. Vytvořené pole má proměnnou délku a při přidávání nebo odebírání objektů ze seznamu se zvětšuje a zmenšuje.

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

ArrayList S1 = nový seznam polí(); System.out.ln ("Počáteční velikost S1:" + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.ln ("Po přidání S1 obsahuje:" + S1); System.out.ln ("Velikost S1 po přidání:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.ln ("Po odstranění S1 obsahuje:" + S1); System.out.ln ("Velikost S1 po odstranění:" + S1.size ()); // OutputInitial size S1: 0 Po přidání S1 obsahuje:; Velikost S1 po přidání: 4 Po odstranění S1 obsahuje: Velikost S1 po odstranění: 2

Ve výše uvedeném kódu to vidíte; Vytvořil jsem řadu objektů typu řetězce. Některé objekty jsem přidal do pole S1 pomocí metody add () a později jsem některé objekty odstranil pomocí metody remove (). Můžete pozorovat, pokud nezadáte počáteční velikost pole, bude mít délku „0“. Jak vidíte, pole se při přidávání a mazání prvků zmenšuje a zmenšuje.

Definice vektoru

Vector je třída Legacy, která je znovu navržena tak, aby podporovala třídu kolekce v hierarchii kolekce Framework. Třída vektorů je také definována v java.util balíček, rozšířen o AbstractList třídy a implementovány Seznam rozhraní. Třída Vector je deklarována následovně:

třída Vector

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

Vektor V = nový vektor(1,1); V.addElement („Tech“); V.addElement („Rozdíly“); System.out.ln ("Kapacita po 2 sčítání:" + V.capacity ()); V.addElement ("Mezi"); V.addElement ("Vektory"); System.out.ln ("Aktuální kapacita:" + V.capacity ()); // Výstupní kapacita po 2 sčítání: 2 Aktuální kapacita: 4

Ve výše uvedeném kódu vidíte, že jsem zejména zmínil velikost a přírůstkovou hodnotu ve konstruktoru Vector, a to při deklarování pole řetězcových objektů. Můžete tedy pozorovat, že jakmile je limit pole dokončen, zvyšuje se o hodnotu poskytovanou konstruktoru při deklaraci.

  1. Na ArrayListu by mohlo pracovat více vláken současně, proto je uvažováno nesynchronizované. Na rozdíl od ArrayListu může na vektoru najednou pracovat pouze jedno vlákno; proto se tomu říká Synchronizováno.
  2. V rané verzi Java by některé třídy a rozhraní poskytovaly metody pro ukládání objektů, kterým se říkalo Legacy classes Vector je jednou z legacy třídy Java. Později byly tyto staré třídy znovu navrženy, aby podporovaly třídu kolekce, zatímco třída ArrayList je standardní třídou kolekce.
  3. Když je limit pole plně využit a nový objekt je přidán vedle vyčerpaného pole, jeho velikost roste v obou případech, tj. V ArrayListu i ve Vektoru, ale rozdíl je v ArrayListu, pokud není specifikována velikost je zvýšen o 50% aktuálního pole, zatímco v poli Vector je velikost zdvojnásobena, pokud není hodnota přírůstku zadána.
  4. Vector používá Enumeraci a Iterator k procházení maticí, zatímco ArrayList používá iterátor pouze pro procházení maticí.
  5. Protože ArrayList je nesynchronizovaný a mnoho vláken na něm může pracovat současně, je jeho výkon lepší než Vector, na kterém může současně pracovat pouze jedno vlákno.

Podobnosti:

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

Závěr:

Na závěr říkám, že použití ArrayList je lepší než použití Vector, protože funguje rychleji a lépe.