Programmering

Vector eller ArrayList - hva er bedre?

Spørsmål: Vector eller ArrayList - hva er bedre og hvorfor?

EN: Noen ganger Vector er bedre; noen ganger ArrayList er bedre; noen ganger vil du ikke bruke det heller. Jeg håper du ikke lette etter et enkelt svar fordi svaret avhenger av hva du gjør. Det er fire faktorer å vurdere:

  • API
  • Synkronisering
  • Datavekst
  • Bruksmønstre

La oss utforske hver i sin tur.

API

I Java-programmeringsspråket (Addison-Wesley, juni 2000) Ken Arnold, James Gosling og David Holmes beskriver Vector som en analog til ArrayList. Så fra et API-perspektiv er de to klassene veldig like. Imidlertid er det fortsatt noen store forskjeller mellom de to klassene.

Synkronisering

Vektorer er synkronisert. Enhver metode som berører Vectorinnholdet er trådsikkert. ArrayListderimot, er usynkronisert, noe som gjør dem derfor ikke trådsikre. Med den forskjellen i tankene vil bruk av synkronisering medføre en ytelseshit. Så hvis du ikke trenger en trådsikker samling, bruk ArrayList. Hvorfor betale prisen på synkronisering unødvendig?

Datavekst

Internt, både ArrayList og Vector holde på innholdet ved hjelp av en Array. Du må huske på dette når du bruker begge programmene. Når du setter inn et element i en ArrayList eller a Vector, må objektet utvide sitt interne utvalg hvis det går tom for rom. EN Vector standardverdien til å doble størrelsen på matrisen, mens ArrayList øker matrisestørrelsen med 50 prosent. Avhengig av hvordan du bruker disse klassene, kan du ende opp med å ta et stort ytelseshit mens du legger til nye elementer. Det er alltid best å sette objektets opprinnelige kapasitet til den største kapasiteten programmet trenger. Ved å stille inn kapasiteten nøye, kan du unngå å betale den nødvendige straffen for å endre størrelsen på den interne matrisen senere. Hvis du ikke vet hvor mye data du vil ha, men du vet hvor raskt den vokser, Vector har en liten fordel siden du kan angi økningsverdien.

Bruksmønstre

Begge ArrayList og Vector er gode for å hente ut elementer fra en bestemt posisjon i beholderen eller for å legge til og fjerne elementer fra enden av beholderen. Alle disse operasjonene kan utføres i konstant tid - O (1). Å legge til og fjerne elementer fra en hvilken som helst annen posisjon viser seg imidlertid dyrere - lineært for å være nøyaktig: O (n-i), hvor n er antall elementer og Jeg er indeksen for elementet lagt til eller fjernet. Disse operasjonene er dyrere fordi du må skifte alle elementene i indeksen Jeg og høyere over med ett element. Så hva betyr alt dette?

Det betyr at hvis du vil indeksere elementer eller legge til og fjerne elementer på slutten av matrisen, bruker du enten a Vector eller en ArrayList. Hvis du vil gjøre noe annet med innholdet, kan du finne deg en annen containerklasse. For eksempel LinkedList kan legge til eller fjerne et element når som helst posisjon i konstant tid - O (1). Imidlertid er det litt tregere å indeksere et element - O (i) hvor Jeg er indeksen til elementet. Krysser en ArrayList er også lettere siden du ganske enkelt kan bruke en indeks i stedet for å måtte opprette en iterator. De LinkedList oppretter også et internt objekt for hvert element som settes inn. Så du må være oppmerksom på det ekstra søppelet som blir opprettet.

Til slutt, i "PRAXIS 41" fra Praktisk Java (Addison-Wesley, februar 2000) Peter Haggar foreslår at du bruker et vanlig gammelt utvalg i stedet for en av dem Vector eller ArrayList - spesielt for ytelseskritisk kode. Ved å bruke en matrise kan du unngå synkronisering, ekstra metodeanrop og suboptimal størrelse. Du betaler bare kostnadene for ekstra utviklingstid.

Lær mer om dette emnet

  • Java-programmeringsspråket Ken Arnold, James Gosling og David Holmes (Addison-Wesley, juni 2000; ISBN0201704331)

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

  • Praktisk Java Peter Haggar (Addison-Wesley, februar 2000; ISBN0201616467)

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

  • Ønsker mer? Se Java Q&A Indeks for hele Q&A katalogen

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

  • For mer enn 100 innsiktsfulle Java-tips fra noen av de beste hodene i virksomheten, besøk JavaWorld 's Java-tips indeks

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

  • Registrer deg for JavaWorld denne uken gratis ukentlig nyhetsbrev via e-post for hva som er nytt på JavaWorld

    //idg.net/jw-abonnement

Denne historien, "Vector eller ArrayList - hva er bedre?" ble opprinnelig utgitt av JavaWorld.

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