Programiranje

Vector ali ArrayList - kaj je boljše?

V: Vector ali ArrayList - kaj je boljše in zakaj?

A: Včasih Vektor je bolje; včasih ArrayList je bolje; včasih nobene ne želite uporabiti. Upam, da niste iskali enostavnega odgovora, ker je odgovor odvisen od tega, kaj počnete. Upoštevati je treba štiri dejavnike:

  • API
  • Sinhronizacija
  • Rast podatkov
  • Vzorci uporabe

Raziskujmo vsakega po vrsti.

API

V Programski jezik Java (Addison-Wesley, junij 2000) Ken Arnold, James Gosling in David Holmes opisujejo Vektor kot analogni ArrayList. Torej sta si z vidika API oba razreda zelo podobna. Vendar pa med obema razredoma še vedno obstaja nekaj večjih razlik.

Sinhronizacija

Vektorji so sinhronizirani. Katera koli metoda, ki se dotakne VektorVsebina osebe je varna za nit. ArrayList, po drugi strani pa je nesinhroniziran, zaradi česar niso varni za nit. Ob upoštevanju te razlike bo uporaba sinhronizacije dosegla uspešnost. Torej, če ne potrebujete zbiranja, varnega za nit, uporabite ArrayList. Zakaj plačati ceno sinhronizacije po nepotrebnem?

Rast podatkov

Interno sta oba ArrayList in Vektor pridržite njihovo vsebino s pomočjo Matrika. To dejstvo morate imeti v mislih, kadar uporabljate katerega koli od svojih programov. Ko vstavite element v ArrayList ali a Vektor, bo moral objekt razširiti svojo notranjo matriko, če mu zmanjka prostora. A Vektor privzeto podvoji velikost svoje matrike, medtem ko ArrayList poveča svojo velikost polja za 50 odstotkov. Glede na to, kako uporabljate te razrede, boste med dodajanjem novih elementov lahko na koncu dosegli velik hit uspešnosti. Vedno je najbolje, da začetno zmogljivost predmeta nastavite na največjo zmogljivost, ki jo potrebuje vaš program. S skrbno nastavitvijo zmogljivosti se lahko izognete plačilu kazni, potrebne za poznejšo spremembo velikosti notranjega polja. Če ne veste, koliko podatkov boste imeli, veste pa hitrost njihove rasti, Vektor ima rahlo prednost, saj lahko nastavite vrednost prirastka.

Vzorci uporabe

Oba ArrayList in Vektor so dobri za pridobivanje elementov iz določenega položaja v vsebniku ali za dodajanje in odstranjevanje elementov s konca vsebnika. Vse te operacije je mogoče izvajati v stalnem času - O (1). Vendar pa se dodajanje in odstranjevanje elementov iz katerega koli drugega položaja izkaže dražje - natančneje linearno: O (n-i), kje n je število elementov in jaz je indeks dodanega ali odstranjenega elementa. Te operacije so dražje, ker morate vse elemente premakniti po indeksu jaz in več za en element. Torej, kaj vse to pomeni?

To pomeni, da če želite indeksirati elemente ali dodati in odstraniti elemente na koncu polja, uporabite ali Vektor ali an ArrayList. Če želite vsebini narediti karkoli drugega, si poiščite drug razred vsebnika. Na primer LinkedList lahko doda ali odstrani element na katerem koli položaju v nenehnem času - O (1). Vendar je indeksiranje elementa nekoliko počasnejše - O (i) kje jaz je indeks elementa. Prehod po ArrayList je tudi lažje, saj lahko preprosto uporabite indeks, namesto da bi morali ustvariti iterator. The LinkedList ustvari tudi notranji objekt za vsak vstavljeni element. Torej se morate zavedati dodatnih smeti, ki nastajajo.

Končno, v "PRAXIS 41" iz Praktična Java (Addison-Wesley, februar 2000) Peter Haggar predlaga, da namesto enega ali drugega uporabite navadno staro matriko Vektor ali ArrayList - zlasti za kodo, ki je kritična za delovanje. Z uporabo polja se lahko izognete sinhronizaciji, klicem dodatnih metod in neoptimalni velikosti. Samo plačate stroške dodatnega razvojnega časa.

Preberite več o tej temi

  • Programski jezik Java Ken Arnold, James Gosling in David Holmes (Addison-Wesley, junij 2000; ISBN0201704331)

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

  • Praktična Java Peter Haggar (Addison-Wesley, februar 2000; ISBN0201616467)

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

  • Želijo več? Glej Vprašanja in odgovori o Javi Kazalo za celoten katalog Vprašanj

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

  • Obiščite več kot 100 vpoglednih nasvetov Java nekaterih najboljših mož v poslu JavaWorld 's Java Nasveti indeks

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

  • Prijavite se za Ta teden JavaWorld brezplačno tedensko e-poštno glasilo o novostih na JavaWorld

    //idg.net/jw-subscribe

Ta zgodba "Vector ali ArrayList - kaj je boljše?" je prvotno objavil JavaWorld.

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