1.1-Introductie-Programmeren

Theorie Lists 2

Competentie: Ik kan naast ArrayLists ook arrays gebruiken en snap het verschil tussen de twee types.

Specifieke leerdoelen:

De opdrachten kunnen gevonden worden in de losse modulen.

Samenvatting

Arrays zijn de “standaard” (basis) implementatie voor lijsten in de meeste programmeertalen. Een ArrayList maakt (zoals de naam doet vermoeden) onder de motorkap gebruik van een array. De reden waarom wij in deze module gebruik maken van een ArrayList om onze lijsten te maken in plaats van een array is vooral vanwege het gemak. Er zijn een aantal belangrijke verschillen tussen een ArrayList en een array:

Arrays

Je hebt stiekem de afgelopen tijd al best veel gewerkt met arrays. Je wist het (waarschijnlijk) alleen nog niet! ArrayLists maken namelijk gebruik van arrays, zoals de naam misschien al deed vermoeden.

Een array is in Java de “standaard” implementatie van een lijst en werkt (net zoals de ArrayList) op basis van indices. Het grote verschil tussen de twee lijstsoorten is echter het gebruik.

Verschillen met ArrayList

Het grootste verschil tussen arrays en ArrayLists is het feit dat arrays een vaste grootte hebben. Dat betekent dat, als je een array aanmaakt van grootte 5, hij altijd maar 5 elementen kan hebben. Als je daarbij een element verwijdert uit een array, ontstaat er een “gat” waar je rekening mee moet houden in je programma. Een ArrayList is een uitbreiding op de array in de vorm dat deze wat van deze problemen oplost.

Een ArrayList bevat intern een array en is ontworpen om eventuele problemen direct zelf op te lossen. Zo zal de ArrayList automatisch voor je een nieuwe array aanmaken als de eerste te klein dreigt te worden en de inhoud kopieren van de oude naar de nieuwe array. Ook zal de ArrayList er automatisch voor zorgen dat elementen die overblijven in een lijst nadat een element verwijderd of toegevoegd wordt weer op een correcte index worden gezet. Als je geen ArrayList maar een array zou gebruiken, dan had je al deze dingen zelf moeten doen.

Het feit dat een array een vaste grootte heeft, is zowel een voor- als nadeel. Wanneer je van tevoren weet hoe groot een bepaalde lijst gaat zijn (zoals een top 10), is een array efficienter in gebruik. Als je daarna ook wil afdwingen dat er “maximaal 10 elementen” zijn kan een array dit automatisch voor je doen. Een ArrayList zal immers altijd kunnen blijven groeien.

Het nadeel van een array is vooral het gebrek aan gemak in het gebruik: Je moet de administratie zelf doen en hebt dus geen “hulpmethoden” die je het leven makkelijk kunnen maken. Voor deze module zal je daarom vaak naar de ArrayList grijpen ipv een array, maar aangezien de array zovaak voorkomt in het programmeren is het belangrijk dat je hem toch een keer gezien hebt!

Syntax

Het aanmaken van een nieuwe array kan op twee manieren. Je kan een nieuwe (lege) array aanmaken van een bepaalde grootte

// Manier 1:
char[] letters = {'a', 'b', 'c', 'd', 'e', 'f' }; // Als je van tevoren weet wat erin komt.

// Manier 2:
int[] numbers = new int[6]; // Als je niet van tevoren weet wat erin komt.

Let op het gebruik van de blokhaken ([]). Dit is manier hoe je array maakt van elk type. In principe kan je van alle variabelen eenvoudig een array maken door aan het type deze twee blokhaken toe te voegen. Een ander voorbeeld: Person somePerson refereert naar een enkele persoon en Person[] persons refereert opeens naar een lijst van Person instanties!

De nummering van een array gaat vervolgens op dezelfde manier is bij een ArrayList. Het eerste element krijgt index 0, het tweede element index 1, etc.

Het toevoegen van een element aan een array gaat op eenzelfde manier als dat je een variabele een waarde zou geven:

char[] letters = new char[3];

letters[0] = 'a';
letters[1] = 'b';
letters[2] = 'c';

int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

Als je een element uit een array wil halen, doe je dat op de volgende manier:

char someLetter = letters[0]; // Haal de waarde op van index 0 uit de array numbers, dit bevat het character 'a'

int someNumber = numbers[6]; // ERROR! Index 6 bestaat niet!

Als laatst kan je nog bijvoorbeeld vragen hoe groot een array is. Hieronder een voorbeeldje waarin ook het verschil met een ArrayList wordt geillustreerd.

// Aanmaken van een array met bekende waarden.
int[] arrayNumbers = {1, 2, 3, 4, 5};

// Aanmaken van een ArrayList met bekende waarden. Meer moeite!
ArrayList<Integer> listNumbers = new ArrayList<>();
for(int i = 1; i <= 5; i++) {
    listNumbers.add(i);
}

int arraySize = arrayNumbers.length; // Levert 5 op.
int listSize = listNumbers.size(); // Levert ook 5 op.

Let op het verschil tussen de twee! Bij een array gebruik je een variabele length om de grootte op te vragen. Bij een ArrayList gebruik je de methode size().

Om het gebruik van arrays wat makkelijker te maken, heeft Java een hele bak met hulpmethoden gemaakt die je kan gebruiken. https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html