Forskel mellem ArrayList og vektor i java

ArrayList og vektor bruger begge Array som en datastruktur internt. Der er dog få forskelle i den måde, de gemmer og behandler dataene på. I dette indlæg vil vi diskutere forskellen og lighederne mellem ArrayList og vektor.

ArrayList Vs Vector:

1) synkronisering: ArrayList er ikke-synkroniseret, hvilket betyder, at flere tråde kan arbejde på ArrayList på samme tid. For eksempel. hvis en tråd udfører en tilføjelseshandling på ArrayList, kan der være en anden tråd, der udfører fjernhandling på ArrayList på samme tid i et flertrådet miljø

, mens Vector er synkroniseret. Dette betyder, at hvis en tråd arbejder på vektor, kan ingen anden tråd få fat i den. I modsætning til ArrayList kan kun en tråd udføre en operation på vector ad gangen.

2) ændre størrelse: både ArrayList og vektor kan vokse og krympe dynamisk for at opretholde den optimale brug af opbevaring, men den måde, de ændres på, er anderledes. ArrayList vokser med halvdelen af sin størrelse, når den ændres, mens Vector fordobler størrelsen af sig selv som standard, når den vokser.

3) ydeevne: ArrayList giver bedre ydeevne, da det ikke er synkroniseret. Vektoroperationer giver dårlig ydeevne, da de er trådsikre, tråden, der fungerer på Vector, får en lås på den, hvilket får anden tråd til at vente, indtil låsen frigøres.

4) fail-fast: lad mig først forklare, hvad der er fail-fast: Hvis samlingen (ArrayList, vektor osv.) bliver strukturelt modificeret på nogen måde, undtagen Tilføj eller fjern metoder til iterator, efter oprettelse af iterator, vil iteratoren kaste ConcurrentModificationException. Strukturel modifikation refererer til tilføjelse eller sletning af elementer fra samlingen.

i henhold til vektoren javadoc er tællingen returneret af vektor ikke fail-fast. På den anden side er iteratoren og listiteratoren returneret af ArrayList fail-fast.

5)hvem hører virkelig til indsamlingsrammen? Vektoren var ikke en del af indsamlingsrammen, den er senere inkluderet i samlinger. Det kan betragtes som arv kode. Der er intet om vektor, som Listesamling ikke kan gøre. Derfor bør vektor undgås. Hvis der er behov for trådsikker betjening, skal ArrayList synkroniseres som diskuteret i næste afsnit af dette indlæg, eller brug Tekstforfatterraylist, som er en trådsikker variant af ArrayList.

der er få ligheder mellem disse klasser, som er som følger:

  1. både vektor og ArrayList bruger dyrkbar array datastruktur.
  2. iteratoren og listiteratoren, der returneres af disse klasser (vektor og ArrayList), fejler hurtigt.
  3. de er begge ordnede indsamlingsklasser, da de opretholder elementernes indsættelsesrækkefølge.
  4. Vector & ArrayList både tillader dublerede og null værdier.
  5. de vokser og krymper begge automatisk, når overløb og sletning sker.

Hvornår skal man bruge ArrayList og hvornår skal man bruge vector?

det afhænger helt af kravet. Hvis der er behov for at udføre “trådsikker” operation, er vektoren dit bedste valg, da det sikrer, at kun en tråd får adgang til samlingen ad gangen.

ydeevne: synkroniserede operationer bruger mere tid sammenlignet med ikke-synkroniserede, så hvis der ikke er behov for trådsikker drift, er ArrayList et bedre valg, da ydeevnen forbedres på grund af de samtidige processer.

Hvordan laver ArrayList synkroniseret?
som jeg sagde ovenfor ArrayList metoder er ikke-synkroniseret, men stadig, hvis der er et behov, kan du gøre dem synkroniseret 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(); ...}