Wat zijn de verschillen tussen ArrayList en Vector?

Wat zijn de verschillen tussen de twee gegevensstructuren ArrayListen Vector, en waar moet je ze allemaal gebruiken?


Antwoord 1, autoriteit 100%

Verschillen

  • Vectoren worden gesynchroniseerd, ArrayLists
    zijn niet.
  • Methoden voor gegevensgroei

Gebruik ArrayLists als er geen specifieke vereiste is om vectoren te gebruiken.

Synchronisatie

Als meerdere threads tegelijkertijd toegang hebben tot een ArrayList, moeten we het codeblok dat de lijst structureel of eenvoudigweg een element wijzigt, extern synchroniseren. Structurele wijziging betekent toevoeging of verwijdering van element(en) uit de lijst. Het instellen van de waarde van een bestaand element is geen structurele wijziging.

Collections.synchronizedListwordt normaal gesproken gebruikt bij het maken van de lijst om onbedoelde niet-gesynchroniseerde toegang tot de lijst te voorkomen.

Gegevensgroei

Intern houden zowel de ArrayList als de Vector hun inhoud vast met behulp van een array. Wanneer een element wordt ingevoegd in een ArrayList of een Vector, moet het object zijn interne array uitbreiden als er onvoldoende ruimte is. Een Vector verdubbelt standaard de grootte van zijn array, terwijl de ArrayList zijn arraygrootte met 50 procent vergroot.


Antwoord 2, autoriteit 25%

Zoals de documentatie zegt, een Vectoren een ArrayListzijn bijna gelijkwaardig. Het verschil is dat toegang tot een Vectorgesynchroniseerd is, terwijl toegang tot een ArrayListdat niet is. Wat dit betekent is dat slechts één thread tegelijkertijd methoden op een Vectorkan aanroepen, en er is een lichte overhead bij het verkrijgen van de vergrendeling; als u een ArrayListgebruikt, is dit niet het geval. Over het algemeen wilt u een ArrayListgebruiken; in het geval met één schroefdraad is het een betere keuze, en in het geval met meerdere draden krijg je betere controle over het vergrendelen. Wilt u gelijktijdig lezen toestaan? Prima. Wilt u één synchronisatie uitvoeren voor een batch van tien schrijfbewerkingen? Ook goed. Het vereist wat meer zorg van uw kant, maar het is waarschijnlijk wat u wilt. Merk ook op dat als je een ArrayList hebt, je de Collections.synchronizedListfunctie om een gesynchroniseerde lijst te maken, waardoor u het equivalent van een Vectorkrijgt.


Antwoord 3, autoriteit 16%

Vectoris een kapot klasse die nietthreadsafe is, ondanks dat deze “gesynchroniseerd” is en alleenwordt gebruikt door studenten en andere onervaren programmeurs.

ArrayListis de standaard implementatie die wordt gebruikt door professionals en ervaren programmeurs.

Professionals die een threadsafe List-implementatie willen, gebruiken een CopyOnWriteArrayList.


Antwoord 4, autoriteit 7%

ArrayListis nieuwer en 20-30% sneller.

Als je iets niet expliciet nodig hebt in Vector, gebruik dan ArrayList


Antwoord 5, autoriteit 7%

Er zijn 2 belangrijke verschillen tussen Vector en ArrayList.

  1. Vector wordt standaard gesynchroniseerd en ArrayList niet.
    Opmerking: u kunt ArrayList ook synchroniseren door het arraylist-object door te geven aan de methode Collections.synchronizedList().
    Gesynchroniseerd betekent: het kan met meerdere draden worden gebruikt zonder enig neveneffect.

  2. ArrayLists groeien met 50% van de vorige grootte als er niet voldoende ruimte is voor een nieuw element, terwijl Vector met 100% van de vorige grootte groeit als er geen ruimte is voor een nieuw binnenkomend element.

Anders dan dit, zijn er enkele praktische verschillen tussen hen, in termen van programmeerinspanning:

  1. Om het element op een bepaalde locatie uit Vector te halen, gebruiken we de functie elementAt(int index). Deze functienaam is erg lang.
    In plaats hiervan hebben we in ArrayList get(int index) wat erg
    gemakkelijk te onthouden en te gebruiken.
  2. Op dezelfde manier om een bestaand element te vervangen door een nieuw element in Vector, gebruiken we de setElementAt() methode, die ook weer erg lang is en de programmeur kan irriteren om herhaaldelijk te gebruiken. In plaats van deze ArrayList heeft de add(int index, object) methode die gemakkelijk te gebruiken en te onthouden is.
    Zo hebben ze meer programmeervriendelijke en gebruiksvriendelijkere functienamen in ArrayList.

Wanneer te gebruiken welke?

  1. Probeer volledig gebruik te maken van vectoren. Arraylists kunnen alles doen wat een vector kan doen. Meer over arraylisten zijn standaard niet gesynchroniseerd. Als u wilt, kunt u het synchroniseren wanneer u ooit nodig hebt door collecties util Class te gebruiken.
  2. Arrayclist heeft gemakkelijk te onthouden en gebruik functienamen.

Opmerking : Hoewel Arrayclist met 100% groeit, kunt u dit vermijden door Ensurecapacity () -methode om ervoor te zorgen dat u voldoende geheugen aan de initiële fasen zelf toewijst.

Ik hoop dat het helpt.


Antwoord 6, Autoriteit 4%

ArrayListen Vectorbeide implementeren lijst interface en onderhoudt invoegvolgorde. Maar er zijn veel verschillen tussen ArrayListen VectorClasses …

arrayclist

  1. ArrayListis niet gesynchroniseerd.
  2. ArrayListVerhoogt 50% van de huidige reeksformaat als het aantal element groter is dan de capaciteit ervan.
  3. ArrayListis geen Legacy-klasse, het wordt geïntroduceerd in JDK 1.2.
  4. ArrayListis snel omdat het niet-gesynchroniseerd is.
  5. ArrayListGebruikt iteratorinterface om de elementen te doorkruisen.

vector

  1. Vectoris gesynchroniseerd.
  2. Vectorstappen 100% betekent verdubbelen van de array-formaat als het totale aantal element groter is dan de capaciteit ervan.
  3. Vectoris een erfenisklasse.

  4. Vectoris traag omdat het gesynchroniseerd is, dwz in een multithreading-omgeving houdt het de andere threads in uitvoerbare of niet-uitvoerbare staat totdat de huidige thread de vergrendeling van het object vrijgeeft.

  5. Vectorgebruikt de Enumeration-interface om de elementen te doorlopen. Maar het kan ook Iterator gebruiken.

Zie ook: https://www.javatpoint.com/difference-between -arraylist-and-vector


Antwoord 7, autoriteit 3%

In principe gebruiken zowel ArrayList als Vector beide interne Object Array.

ArrayList:de klasse ArrayList breidt AbstractList uit en implementeert de List-interface en RandomAccess (markeringsinterface). ArrayList ondersteunt dynamische arrays die naar behoefte kunnen groeien. Het geeft ons de eerste iteratie over elementen.
ArrayList gebruikt interne Object Array; ze zijn gemaakt met een standaard aanvankelijke grootte van 10. Wanneer deze grootte wordt overschreden, wordt de verzameling automatisch vergroot tot de helft van de standaardgrootte die 15 is.

Vector:Vector is vergelijkbaar met ArrayList, maar de verschillen zijn, het is gesynchroniseerd en de standaard initiële grootte is 10 en wanneer de grootte groter is dan de grootte, wordt het dubbele van de oorspronkelijke grootte, wat betekent dat de nieuwe grootte zal 20 zijn. Vector is de enige andere klasse dan ArrayList die RandomAccess implementeert. Vector heeft vier constructors waarvan er één twee parameters nodig heeft Vector(int initialCapacity, int capacityIncrement)capacityIncrement is de hoeveelheid waarmee de capaciteit wordt verhoogd wanneer de vector overloopt, zodat deze meer controle heeft over de belasting factor.

Enkele andere verschillen zijn:

Other episodes