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.synchronizedList
wordt 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 Vector
en een ArrayList
zijn bijna gelijkwaardig. Het verschil is dat toegang tot een Vector
gesynchroniseerd is, terwijl toegang tot een ArrayList
dat niet is. Wat dit betekent is dat slechts één thread tegelijkertijd methoden op een Vector
kan aanroepen, en er is een lichte overhead bij het verkrijgen van de vergrendeling; als u een ArrayList
gebruikt, is dit niet het geval. Over het algemeen wilt u een ArrayList
gebruiken; 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.synchronizedList
functie om een gesynchroniseerde lijst te maken, waardoor u het equivalent van een Vector
krijgt.
Antwoord 3, autoriteit 16%
Vector
is een kapot klasse die nietthreadsafe is, ondanks dat deze “gesynchroniseerd” is en alleenwordt gebruikt door studenten en andere onervaren programmeurs.
ArrayList
is 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%
ArrayList
is 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.
-
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. -
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:
- 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. - 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?
- 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.
- 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%
ArrayList
en Vector
beide implementeren lijst interface en onderhoudt invoegvolgorde. Maar er zijn veel verschillen tussen ArrayList
en Vector
Classes …
ArrayList
is niet gesynchroniseerd.ArrayList
Verhoogt 50% van de huidige reeksformaat als het aantal element groter is dan de capaciteit ervan.ArrayList
is geen Legacy-klasse, het wordt geïntroduceerd in JDK 1.2.ArrayList
is snel omdat het niet-gesynchroniseerd is.ArrayList
Gebruikt iteratorinterface om de elementen te doorkruisen.
vector –
Vector
is gesynchroniseerd.Vector
stappen 100% betekent verdubbelen van de array-formaat als het totale aantal element groter is dan de capaciteit ervan.-
Vector
is een erfenisklasse. -
Vector
is 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. -
Vector
gebruikt 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: