Ohjelmointi

Vector tai ArrayList - mikä on parempi?

K: Vector tai ArrayList - mikä on parempi ja miksi?

A: Joskus Vektori on parempi; joskus ArrayList on parempi; joskus et halua käyttää kumpaakaan. Toivon, ettet etsinyt helppoa vastausta, koska vastaus riippuu siitä, mitä olet tekemässä. Huomioon on otettava neljä tekijää:

  • API
  • Synkronointi
  • Tietojen kasvu
  • Käyttömallit

Tutkitaan kutakin peräkkäin.

API

Sisään Java-ohjelmointikieli (Addison-Wesley, kesäkuu 2000) Ken Arnold, James Gosling ja David Holmes kuvaavat Vektori analogisena ArrayList. Joten API: n näkökulmasta nämä kaksi luokkaa ovat hyvin samanlaisia. Näiden kahden luokan välillä on kuitenkin edelleen joitain merkittäviä eroja.

Synkronointi

Vektorit ovat synkronoituja. Mikä tahansa menetelmä, joka koskettaa Vektorisen sisältö on langattomasti turvallista. ArrayList, toisaalta, on synkronoimaton, joten ne eivät siten ole langattomia. Kun otetaan huomioon tämä ero, synkronoinnin käyttäminen aiheuttaa suorituskyvyn osuman. Joten jos et tarvitse langankestävää kokoelmaa, käytä ArrayList. Miksi maksaa synkronoinnin hinta tarpeettomasti?

Tietojen kasvu

Sisäisesti molemmat ArrayList ja Vektori pidä kiinni niiden sisällöstä käyttämällä Taulukko. Sinun on pidettävä tämä seikka mielessä, kun käytät kumpaakin ohjelmissasi. Kun lisäät elementin ArrayList tai a Vektori, objektin on laajennettava sisäistä taulukkoaan, jos se loppuu huoneesta. A Vektori oletuksena kaksinkertaistaa taulukon koon, kun taas ArrayList lisää matriisin kokoa 50 prosenttia. Riippuen siitä, miten käytät näitä luokkia, saatat päätyä suureen suorituskykyosuuteen lisäämällä uusia elementtejä. On aina parasta asettaa objektin alkukapasiteetti suurimmalle kapasiteetille, jota ohjelma tarvitsee. Asettamalla kapasiteetti huolellisesti, voit välttää sisäisen taulukon koon muuttamiseen tarvittavan sakon maksamisen myöhemmin. Jos et tiedä kuinka paljon tietoa sinulla on, mutta tiedät sen kasvunopeuden, Vektori sillä on pieni etu, koska voit asettaa lisäysarvon.

Käyttömallit

Molemmat ArrayList ja Vektori ovat hyviä elementtien noutamiseksi tietystä sijainnista säiliössä tai elementtien lisäämiseen ja poistamiseen säiliön päästä. Kaikki nämä toiminnot voidaan suorittaa vakiona - O (1). Elementtien lisääminen ja poistaminen mistä tahansa muusta paikasta osoittautuu kuitenkin kalliimmaksi - tarkalleen lineaariseksi: O (n-i), missä n on elementtien lukumäärä ja i on lisätyn tai poistetun elementin hakemisto. Nämä toiminnot ovat kalliimpia, koska sinun on siirrettävä kaikki elementit hakemistossa i ja korkeampi yhden elementin yli. Joten mitä tämä kaikki tarkoittaa?

Se tarkoittaa, että jos haluat indeksoida elementtejä tai lisätä tai poistaa elementtejä taulukon lopussa, käytä joko a Vektori tai an ArrayList. Jos haluat tehdä jotain muuta sisällölle, etsi itsellesi toinen säiliöluokka. Esimerkiksi LinkedList voi lisätä tai poistaa elementin missä tahansa paikassa vakiona - O (1). Elementin indeksointi on kuitenkin hieman hitaampaa - O (i) missä i on elementin indeksi. Liikkuminen ja ArrayList on myös helpompaa, koska voit käyttää vain hakemistoa iteraattorin luomisen sijaan. LinkedList luo myös sisäisen objektin jokaiselle lisätylle elementille. Joten sinun on oltava tietoinen syntyvästä ylimääräisestä roskasta.

Lopuksi julkaisussa "PRAXIS 41" Käytännöllinen Java (Addison-Wesley, helmikuu 2000) Peter Haggar ehdottaa, että käytät tavallista vanhaa taulukkoa jommankumman sijasta Vektori tai ArrayList - erityisesti suorituskykykriittisten koodien osalta. Taulukon avulla voit välttää synkronoinnin, ylimääräiset menetelmäpuhelut ja optimaalisen koon muuttamisen. Maksat vain ylimääräisen kehitysajan kustannukset.

Lisätietoja tästä aiheesta

  • Java-ohjelmointikieli Ken Arnold, James Gosling ja David Holmes (Addison-Wesley, kesäkuu 2000; ISBN0201704331)

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

  • Käytännöllinen Java Peter Haggar (Addison-Wesley, helmikuu 2000; ISBN0201616467)

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

  • Haluta lisää? Katso Java-kysymykset ja vastaukset Hakemisto koko Q & A-luetteloon

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

  • Jos haluat saada yli 100 oivaltavaa Java-vinkkiä yrityksen parhailta mieliltä, ​​käy osoitteessa JavaWorld 's Java-vinkkejä indeksi

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

  • Rekisteröidy JavaWorld tällä viikolla ilmainen viikoittainen sähköpostitiedote uutuuksista JavaWorld

    //idg.net/jw-subscribe

Tämä tarina "Vector tai ArrayList - mikä on parempi?" julkaisi alun perin JavaWorld.

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