Hoofdstuk 3: Arrays en ArrayList
Inleiding
- Een datastructuur is een verzameling van gegevens die op een bepaalde manier georganiseerd is. De structuur voorziet niet alleen om de verzameling van gegevens op te slaan maar ook om operaties te doen op die gegevens.
In object geörienteerd denken, wordt een datastructuur ook genoemd als een container of container object. Dit is een object dat verwijst naar andere object.
We hebben al arrays gezien om gegevens te organiseren als een opeenvolgende rij van gegevens. We kunnen ook arrays van objecten maken. Daarnaast bestaat er ook een slimme lijst
ArrayList
die veel meer kan dan enkel de rij van objecten bijhouden.
Arrays van objecten
Een array kan niet alleen primitieve datatypes bewaren (double, int,...) maar ook objecten.
- We kunnen arrays gebruiken om gegevens van primitieve datatypes te bewaren.
int[] rij = new int[10]; //maakt een rij van 10 gehele getallen
double[] coordinaten = {0.1 -1.0 0.3 2.4};
- We kunnen ook arrays gebruiken om objecten van een klasse in te bewaren. Bijvoorbeeld, zo kunnen we een array van Cirkel objecten bewaren:
Cirkel[] cirkelRij = new Cirkel[10]; //maakt een rij waarin 10 cirkel objecten zitten
- Dit resulteert in een array waarbij elk element wijst naar een Cirkel object. Echter, deze cirkel objecten zijn nog niet gemaakt, we moeten ze nog construeren met een de constructor van de klasse
Cirkel
. We moeten dus
for (int i = 0; i < cirkelRij.length; i++) {
cirkelRij[i] = new Cirkel();
}
Een array van objecten is in feite een array van verwijzingen. Je kan een verwijzing opvragen naar een element van de array door
cirkelRij[1]
. Dit is een verwijzing naar een cirkel object. Je kan dan een functie aanroepen op die verwijzing door:cirkelRij[1].berekenOppervlakte()
. We hebben dus twee niveau's van verwijzen:cirkelRij
refereert naar de ArrayscirkelRij[1]
refereert naar een object van de klasseCirkel
Het aanmaken van een array van objecten gebeurt in het algemeen in 3 stappen
- Declaratie van de array:
Cirkel[] cirkelRij;
- Constructie van het array object met
new
:cirkelRij = new Cirkel[];
- Constructie van alle objecten in de array:
- Declaratie van de array:
for (int i = 0; i < cirkelRij.length; i++){
cirkelRij[i] = new Cirkel();
}
- Onderstaand voorbeeld zal de oppervlakte berkenen van een verzameling van Cirkel objecten:
Cirkel.java
TotaleOppervlakte.java
ArrayList
Een ArrayList is een slimme lijst van allemaal objecten
Hiervoor zagen we dat we een array kunnen definiëren om een lijst van objecten in te bewaren. Maar eens de array gemaakt is, is de lengte van de array vast. Java voorziet de klasse
ArrayList
die kan gebruikt worden om een onbeperkt aantal objecten in opo te slaan.Hieronder vind je enkele methodes in ArrayList.

ArrayList
is gekend als een algemene klasse met dat objecten van om het even welk type kan bevatten. Je moet specifiëren van welk type de objecten zijn die in de ArrayList kunnen zitten. Zo kunnen we ook stukjes tekst in de ArrayList plaatsen als objecten van het type String.
ArrayList<String> steden = new ArrayList<String>();
- Volgend stukje code geeft aan hoe we ArrayLists kunnen gebruiken om steden te verzamelen en te organiseren.
- There are some differences and similaries between Arrays and
ArrayList
Operation | Array | ArrayList |
---|---|---|
Creatie van een array/ArrayList | String[] a = new String[10] |
ArrayList<String> a = new ArrayList<String>() |
Opvragen van een element | a[index] |
a.get(index) |
Aanpassen van een element | a[index] = "London"; |
a.set(index, "London"); |
Opvragen van de groote | a.length |
a.size() |
Toevoegen van een nieuw element | kan niet in array | a.add("London"); |
Invoegen van een nieuw element | kan niet in array | a.add(index, "London"); |
Verwijderen van een element | kan niet in array | a.remove(index); |
Verwijderen van een element | kan niet in array | a.remove(Object); |
Verwijderen van alle elementen | kan niet in array | a.clear(); |
- Een ArrayList kan je enkel gebruiken om objecttypes te gaan opslaan. Primitieve types kunnen niet opgeslagen worden in ArrayList (wel in Arrays). Stel dat we een ArrayList willen maken van integers dan zou je het volgende kunnen gebruiken:
ArrayList<int> lijst = new ArrayList<int>();
- Dit zal niet werken omdat de elementen van ArrayList van het object type moeten zijn. We kunnen de primitieve klasse
int
niet gebruiken in ArrayList. In plaats hiervan moeten we wikkelklasseInteger
gebruiken die ook eenint
voorsteld, maar dan van het Object type.
ArrayList<Integer> lijst = new ArrayList<Integer>();
- Hieronder vind je een voorbeeldprogramma die hiervan gebruik maakt. We willen getallen opvragen via gebruikersinvoer (met behulp van de
Scanner
klasse) en deze opslaan in een lijst. We weten a priori niet hoeveel nummers er gevraagd worden, dus moet onze lijst daarmee rekening houden. Traditionele arrays eisen dat de grootte op voorhand vast ligt, maar bij de klasseArrayList
hoeft dat niet.ArrayList
kan om met een onbekende grootte, maar eist wel dat er objecttypes in de lijst worden opgeslagen. Hiervoor kunnen we dus de wikkelklasseInteger
gebruiken.
Nummer.java
Het is eenvoudiger om dit te implementeren via de klasse
ArrayList
om twee redenen:- De grootte van een object van het type
ArrayList
is flexibel, we moeten de grootte niet specifiëren. - De klasse
ArrayList
heeft veel bruikbare methodes die een object kan uitvoeren.
- De grootte van een object van het type
Een ander voordeel is dat je over een lijst kan gaan via een foreach-lus. Een foreach lus vermijdt het gebruik van een controlevariabele.
for (elementType element: arrayList){
// Process the element
}
- Bijvoorbeeld kan je het gemiddelde berekenen als volgt
Bruikbare methodes voor ArrayList
Java voorziet methodes voor het maken van lijsten vanuit een array, voor het sorteren van een lisjt en voor het zoeken van een maximum en een minimum in de lijst
- Array naar ArrayList
- ArrayList naar ArrayList
- Sorteren van een lijst
- Minimum en maximum in de lijst