Forskjellen Mellom ArrayList og Vektor i java

ArrayList og Vektor begge bruker Array som en datastruktur internt. Det er imidlertid få forskjeller i måten de lagrer og behandler dataene på. I dette innlegget vil vi diskutere forskjellen og likhetene Mellom ArrayList og Vektor.

ArrayList Vs Vector:

1) Synkronisering: ArrayList er ikke-synkronisert, noe som betyr at flere tråder kan fungere På ArrayList samtidig. Til f. eks. hvis en tråd utfører en add-operasjon På ArrayList, kan det være en annen tråd som utfører fjernoperasjon På ArrayList samtidig i et flertrådet miljø

mens Vektor er synkronisert. Dette betyr at hvis en tråd fungerer På Vector, kan ingen annen tråd få tak i Den. I motsetning Til ArrayList kan bare en tråd utføre en operasjon på vektor om gangen.

2) Endre Størrelse: Både ArrayList og Vector kan vokse og krympe dynamisk for å opprettholde optimal bruk av lagring, men måten de endres på, er forskjellig. ArrayList vokser med halvparten av størrelsen når Størrelsen endres, Mens Vektor dobler størrelsen på seg selv som standard når den vokser.

3) Ytelse: ArrayList gir bedre ytelse som den ikke er synkronisert. Vektoroperasjoner gir dårlig ytelse da de er trådsikre, tråden som fungerer På Vektor, får en lås på den som gjør at andre tråder venter til låsen slippes ut.

4) fail-fast: Først la meg forklare hva som er fail-fast: Hvis samlingen (ArrayList, vektor etc) blir strukturelt modifisert på noen måte, unntatt legg til eller fjern metoder for iterator, etter opprettelse av iterator, vil iteratoren kaste ConcurrentModificationException. Strukturell modifikasjon refererer til tillegg eller sletting av elementer fra samlingen.

i Henhold Til Vektoren javadoc Er Oppregningen returnert Av Vektor ikke fail-fast. På den andre siden er iteratoren og listIterator returnert Av ArrayList fail-fast.

5) hvem tilhører samlingsrammen egentlig? Vektoren var ikke en del av samlingsrammen, den har blitt inkludert i samlinger senere. Det kan betraktes Som Arvskode. Det er ingenting Om Vektor Som Listesamling ikke kan gjøre. Vector bør derfor unngås. Hvis det er behov for trådsikker drift, gjør ArrayList synkronisert som diskutert i neste del av dette innlegget, eller bruk CopyOnWriteArrayList som er en trådsikker variant Av ArrayList.

det er få likheter mellom disse klassene som er som følger:

  1. Både Vektor og ArrayList bruke growable array datastruktur.
  2. iteratoren og listIterator returnert av disse klassene (Vektor og ArrayList) er fail-fast.
  3. de begge er bestilt samling klasser som de opprettholder elementene innsettingsrekkefølgen.
  4. Vektor & ArrayList tillater både dupliserte og nullverdier.
  5. begge vokser og krymper automatisk når overløp og sletting skjer.

Når skal Du bruke ArrayList og når skal du bruke vektor?

det avhenger helt av kravet. Hvis det er behov for å utføre «trådsikker»-operasjon, er vektoren din beste innsats, da det sikrer at bare en tråd får tilgang til samlingen om gangen.

Ytelse: Synkroniserte operasjoner bruker mer tid sammenlignet med ikke-synkroniserte, så Hvis Det ikke er behov for trådsikker drift, Er ArrayList et bedre valg da ytelsen vil bli forbedret på grunn av samtidige prosesser.

hvordan lage ArrayList synkronisert?
Som jeg nevnte ovenfor ArrayList metoder er ikke-synkronisert, men fortsatt hvis det er behov du kan gjøre dem synkronisert som dette –

//Use Collecions.synzhonizedList methodList list = Collections.synchronizedList(new ArrayList());...//If you wanna use iterator on the synchronized list, use it//like this. It should be in synchronized block.synchronized (list) { Iterator iterator = list.iterator(); while (iterator.hasNext()) ... iterator.next(); ...}