Direct naar de hoofdinhoud
Module 4 · Les 2 van 28/14 in de cursus~15 min
Modulelessen (2/2)

Verzamelingen en ArrayList

Traditionele arrays in Java hebben een vaste grootte die is gedefinieerd op het moment van creatie. Om te werken met lijsten met gegevens waarvan de grootte dynamisch kan variëren, biedt Java het Java Collections Framework. De meest gebruikte klasse is ArrayList.

De klasse ArrayList en generieken

ArrayList implementeert een aanpasbare array in het geheugen. Om een ​​ArrayList te declareren, moeten we het type elementen specificeren dat het zal bevatten door het tussen punthaken < > te plaatsen. Deze functie heet Generische.

Om ArrayList te gebruiken, moeten we het aan het begin van het bestand importeren uit java.util.ArrayList.

Verklaring en instantiatie:

Java
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Kernmethoden

Dit zijn de fundamentele bewerkingen op een ArrayList:

  1. add(element): Voegt een element toe aan het einde van de lijst.
  2. get(index): retourneert het element op de opgegeven index (0-geïndexeerd).
  3. size(): Retourneert het aantal elementen dat momenteel in de lijst staat.
  4. remove(index): verwijdert het element op de opgegeven index.
Java
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"

Een lijst herhalen (voor elk)

De for-each-lus is de ideale structuur om alle elementen van een verzameling te doorlopen:

Java
for (String item : shoppingList) {
    System.out.println(item);
}

Array versus ArrayList: geheugen en prestaties

Hoewel ArrayList veel flexibeler is dan een statische array, gaat het gepaard met compromissen op het gebied van prestaties en geheugen:

  • Statische array: deze wordt toegewezen in een aaneengesloten geheugenblok, heeft een vaste grootte en de toegang tot elementen via index is extreem snel. Het slaat primitieve typen direct op, zonder overhead.
  • ArrayList: intern beheert het een array waarvan de grootte wordt gewijzigd (door een nieuwe, grotere array te maken en oude elementen te kopiëren) wanneer de initiële capaciteit (meestal 10) wordt overschreden. Bovendien slaat het alleen objectreferenties op, waardoor voor elk element geheugenoverhead wordt geïntroduceerd.

Autoboxen en unboxen

Omdat ArrayList alleen objecten kan bevatten, voert Java automatisch conversies uit tussen primitieve typen en hun respectievelijke wrapper-klassen:

  • Autoboxing: automatische conversie van een primitief type naar een wrapper-klasse. Wanneer u bijvoorbeeld numbers.add(42) schrijft, converteert Java automatisch 42 (int) naar Integer.valueOf(42) (geheel getal).
  • Unboxing: automatische conversie van een wrapper-klasse naar een primitief type. Wanneer u bijvoorbeeld int num = numbers.get(0) uitvoert, converteert Java intern Integer naar int.

Probeer het zelf

Oefening#java.m4.l2.e1
Pogingen: 0Laden…

Importeer ArrayList, declareer een ArrayList met namen met tekenreeksen. Voeg Alice en Bob toe aan de lijst en druk vervolgens de grootte ervan af met behulp van de size() methode.

Editor laden…
Toon hint

Voeg bovenaan 'import java.util.ArrayList;' toe. Maak de lijst met `ArrayList<String> namen = new ArrayList<>();`, voeg de elementen toe en druk de grootte ervan af met `names.size()`.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m4.l2.e2
Pogingen: 0Laden…

Declareer een ArrayList met gehele getallen met de naam, voeg het getal 42 toe en druk het af door het op te halen bij index 0 met behulp van get().

Editor laden…
Toon hint

Gebruik `ArrayList<Integer> getallen = new ArrayList<>();` (met de Integer wrapper-klasse) en druk het af met `System.out.println(numbers.get(0));`.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m4.l2.e3
Pogingen: 0Laden…

Declareer een ArrayList van String met de naam kleuren. Voeg de kleuren Rood, Groen en Blauw toe aan de lijst. Gebruik ten slotte een for-each-lus om door de lijst te lopen en elke kleur op het scherm af te drukken.

Editor laden…
Toon hint

Declareer de lijst met `ArrayList<String> kleuren = new ArrayList<>();`, voeg de drie kleuren toe en gebruik een lus `for (String c: kleuren)` om ze af te drukken met `System.out.println(c);`.

Oplossing beschikbaar na 3 pogingen