Programovanie

Vektor alebo ArrayList - čo je lepšie?

Otázka: Vector alebo ArrayList - čo je lepšie a prečo?

A: Niekedy Vektor je lepšia; niekedy ArrayList je lepšia; niekedy ani ty nechceš použiť. Dúfam, že ste nehľadali ľahkú odpoveď, pretože odpoveď závisí od toho, čo robíte. Je potrebné vziať do úvahy štyri faktory:

  • API
  • Synchronizácia
  • Rast údajov
  • Vzory použitia

Poďme každú z nich postupne preskúmať.

API

V Programovací jazyk Java (Addison-Wesley, jún 2000) Ken Arnold, James Gosling a David Holmes popisujú Vektor ako analóg k ArrayList. Z pohľadu API sú si teda tieto dve triedy veľmi podobné. Medzi týmito dvoma triedami však stále existujú určité veľké rozdiely.

Synchronizácia

Vektory sú synchronizované. Akákoľvek metóda, ktorá sa dotýka VektorObsah je bezpečný pre vlákna. ArrayListna druhej strane nie je synchronizovaný, a preto nie sú bezpečné pre vlákna. S ohľadom na tento rozdiel bude synchronizácia znamenať zásah do výkonu. Takže ak nepotrebujete kolekciu bezpečnú pre vlákna, použite ArrayList. Prečo zbytočne platiť cenu synchronizácie?

Rast údajov

Vnútorne obidva ArrayList a Vektor pridržte ich obsah pomocou Pole. Túto skutočnosť musíte mať na pamäti pri používaní niektorého zo svojich programov. Keď vložíte prvok do súboru ArrayList alebo a Vektor, objekt bude musieť rozšíriť svoje vnútorné pole, ak mu dôjde miestnosť. A Vektor predvolené nastavenie je zdvojnásobenie veľkosti jeho poľa, zatiaľ čo ArrayList zvyšuje veľkosť poľa o 50 percent. V závislosti na tom, ako tieto triedy používate, môžete pri pridávaní nových prvkov skončiť veľkým zásahom do výkonnosti. Vždy je najlepšie nastaviť počiatočnú kapacitu objektu na najväčšiu kapacitu, ktorú bude váš program potrebovať. Starostlivým nastavením kapacity môžete zabrániť plateniu penále potrebného na neskoršiu zmenu veľkosti vnútorného poľa. Ak neviete, koľko dát budete mať, ale viete, ako rýchlo rastú, Vektor má malú výhodu, pretože môžete nastaviť hodnotu prírastku.

Vzory použitia

Obaja ArrayList a Vektor sú dobré na načítanie prvkov z konkrétnej polohy v kontajneri alebo na pridanie a odstránenie prvkov z konca kontajnera. Všetky tieto operácie je možné vykonávať v konštantnom čase - O (1). Pridávanie a odstraňovanie prvkov z akejkoľvek inej polohy sa však ukazuje ako nákladnejšie - presnejšie lineárne: O (n-i), kde n je počet prvkov a i je index pridaného alebo odstráneného prvku. Tieto operácie sú nákladnejšie, pretože musíte posunúť všetky prvky v indexe i a vyššie o jeden prvok. Čo to všetko znamená?

To znamená, že ak chcete indexovať prvky alebo pridávať a odstraňovať prvky na konci poľa, použite buď a Vektor alebo an ArrayList. Ak chcete s obsahom urobiť niečo iné, choďte si nájsť inú triedu kontajnerov. Napríklad LinkedList môže pridávať alebo odstraňovať prvky na ľubovoľných pozíciách v konštantnom čase - O (1). Indexovanie prvku je však o niečo pomalšie - O (i) kde i je index prvku. Traversing an ArrayList je tiež jednoduchšie, pretože namiesto vytvorenia iterátora môžete jednoducho použiť index. The LinkedList tiež vytvorí vnútorný objekt pre každý vložený prvok. Musíte si byť vedomí toho, aké ďalšie odpadky sa vytvárajú.

Nakoniec v "PRAXIS 41" od Praktická Java (Addison-Wesley, február 2000) Peter Haggar navrhuje, aby ste namiesto jedného z nich použili obyčajné staré pole Vektor alebo ArrayList - najmä pre výkonovo dôležitý kód. Použitím poľa sa môžete vyhnúť synchronizácii, ďalším volaniam metód a neoptimálnej zmene veľkosti. Iba platíte náklady na čas potrebný na ďalší vývoj.

Získajte viac informácií o tejto téme

  • Programovací jazyk Java Ken Arnold, James Gosling a David Holmes (Addison-Wesley, jún 2000; ISBN0201704331)

    //www.amazon.com/exec/obidos/ASIN/0201704331/javaworld/

  • Praktická Java Peter Haggar (Addison-Wesley, 2. február 2000; ISBN0201616467)

    //www.amazon.com/exec/obidos/ASIN/0201616467/javaworld/

  • Chcieť viac? Viď Java Q&A Register pre celý katalóg otázok a odpovedí

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

  • Viac ako 100 bystrých tipov pre jazyk Java od najlepších odborníkov v odbore nájdete na stránke JavaWorld 's Tipy pre Java index

    //www.javaworld.com/javatips/jw-javatips.index.html

  • Zaregistrujte sa do JavaWorld tento týždeň bezplatný týždenný e-mailový spravodaj o novinkách na JavaWorld

    //idg.net/jw-subscribe

Tento príbeh „Vektor alebo ArrayList - čo je lepšie?“ pôvodne vyšla vo vydavateľstve JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found