ProgrammatieBackend ontwikkelaar

Hoe werken collecties in Java? Wat zijn de verschillen tussen ArrayList, LinkedList en HashMap?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Java implementeren collecties gegevensstructuren voor het werken met groepen objecten. De belangrijkste structuren:

  • ArrayList (implmenteert de List-interface) slaat elementen op in een array, zorgt voor snelle toegang op index, maar invoegen/verwijderen van elementen in het midden is langzaam, omdat dit verplaatsing van elementen vereist.

  • LinkedList (ook een implementatie van List) is gebouwd op een dubbel gekoppelde lijst. Het voegt snel elementen in of verwijdert deze uit het midden, maar toegang op index is traag omdat je de lijst vanaf het begin of het einde moet doorlopen.

  • HashMap implementeert de Map-interface. Het slaat sleutel-waarde paren op. Snelle toegang (O(1)) tot waarden op basis van sleutels wordt verzekerd via een hashfunctie, maar het garandeert geen volgorde van de elementen.

List<String> arrayList = new ArrayList<>(); arrayList.add("A"); // snel arrayList.get(0); // snel List<String> linkedList = new LinkedList<>(); linkedList.add("A"); // iets langzamer linkedList.add(0, "B"); // snel Map<String, Integer> map = new HashMap<>(); map.put("one", 1); Integer val = map.get("one"); // snel

Vragen met een valstrik.

Wat is het fundamentele verschil tussen HashMap en Hashtable, en waarom wordt Hashtable praktisch niet meer gebruikt in moderne code?

Antwoord: HashMap is niet gesynchroniseerd, staat null als sleutel en als waarde toe. Hashtable is gesynchroniseerd (meerdere threads kunnen met één object werken zonder de integriteit in gevaar te brengen), maar staat geen null toe en is trager. In moderne code wordt vaker ConcurrentHashMap gebruikt voor threadveiligheid, omdat het efficiënter is en beter kan worden afgesteld voor multidraadverwerkingen.

Map<String, String> map1 = new HashMap<>(); map1.put(null, "waarde"); // OK Map<String, String> map2 = new Hashtable<>(); map2.put(null, "waarde"); // NullPointerException

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp.


Geschiedenis

In een leerlingregistratiesysteem werd een ArrayList gebruikt voor frequente invoegingen en verwijderingen in het midden van de lijst, wat leidde tot ernstige prestatieproblemen bij een grote hoeveelheid gegevens. Na de overstap naar LinkedList normaliseerde de situatie.


Geschiedenis

In een multithreaded CRM-systeem werd een HashMap gebruikt voor het opslaan van gegevens tussen threads zonder synchronisatie, wat af en toe leidde tot inconsistente gegevens en crashes door race conditions. Na de overstap naar ConcurrentHashMap verdween de bug.


Geschiedenis

Een ontwikkelaar probeerde een null-sleutel aan een Hashtable toe te voegen, zonder van het verbod af te weten. Dit veroorzaakte een NullPointerException, het duurde lang voordat ze konden ontdekken waarom de applicatie onverwacht crashte.