Competentie: Ik kan naast ArrayLists ook arrays gebruiken en snap het verschil tussen de twee types.
Specifieke leerdoelen:
Arrays
de fundamentele implementatie is voor lijsten in programmeertalen, waaronder Java.ArrayLists
intern gebaseerd zijn op Arrays
, maar meer flexibiliteit leveren.ArrayLists
en Arrays
op de volgende gebieden:
Arrays
(ook) bij index 0 beginnen.Array
gebruikt, zoals het toevoegen en verwijderen van elementen.Arrays klasse
verschillende handige hulpmethoden levert.De opdrachten kunnen gevonden worden in de losse modulen.
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:
list.remove(5)
) ontstaat er geen gat. De overige elementen verschuiven
namelijk automatisch een plekje om de lege index weer in te vullen. Als je een element uit een normale array haalt,
ontstaat er een “gat” die je later zelf weer kan/ moet dichten.Integer
, Double
, Boolean
). Dit kost iets meer tijd/ geheugenruimte en wordt dus vaak gezien als
minder efficient.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.
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!
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()
.
Ee is een handige String utility methode genaamd .split()
om een String op te delen in losse array elementen. Het argument bepaald op welk karakter de string wordt gesplitst. In het onderstaande voorbeeld wordt een string gesplitst op een spatie karakter.
String natoAlphabet = "Alpha Bravo Charlie Delta";
String [] letters = natoAlphabet.split(" "); // Split on space character
// letters[0] = "Alpha";
// letters[1] = "Bravo";
// letters[2] = "Charlie";
// letters[3] = "Delta";
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