De non-generic collections zijn de oudste en meest gebruikte collections in het .NET Framework. Ze zijn niet type-safe, wat betekent dat ze elementen van verschillende types kunnen bevatten.
Zo kan je dus in een non-generic collection zowel strings,doubles, booleans als integers opslaan bijvoorbeeld. Je komt als programmeur of programmeuse ;-) snel in de verleiding om non-generic collections te gebruiken omdat je niet op voorhand moet nadenken welke datatypes er zullen worden toegevoegd, maar dit is geen goede gewoonte.
Omdat de non-generic collections dus alle soorten elementen kunnen bevatten, moet je zelf controleren of de elementen die je uit de collection haalt wel van het type zijn dat je verwacht.
Als je bv probeert om de som van alle elementen van een collection te berekenen, moet je dus zelf controleren of de elementen die je uit de collection haalt wel integers zijn.
De non-generic collections zijn ook niet performant, wat betekent dat ze niet zo efficiënt zijn als de generic collections. Ze zijn echter wel eenvoudig in gebruik.
De non-generic collections zijn de volgende:
In deze cursus zullen we enkel de ArrayList gebruiken.
Deze werkt als een array maar kan dynamisch groeien. Je hoeft dus bij het declareren van de ArrayList niet op voorhand te weten hoeveel elementen er in de ArrayList zullen zitten.
Een ArrayList declareer je als volgt:
//declaratie van een ArrayList
ArrayList mijnLijst = new ArrayList();
TIP
Voor je een ArrayList kan declareren moet je de namespace
System.Collections
importeren. Dit doe je door bovenaan je code een using-instructie te schrijven:using System.Collections;
using System.Collections;
namespace MijnProject
{
class Program
{
static void Main(string[] args)
{
//declaratie van een ArrayList
ArrayList mijnLijst = new ArrayList();
}
}
}
Je kan een ArrayList ook declareren en initialiseren in één enkele regel code:
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
Deze ArrayList bevat nu 3 elementen: "element 1", "element 2" en "element 3"
.
Je kan elementen toevoegen aan een ArrayList met de methode Add()
. Deze worden dan achteraan de ArrayList toegevoegd.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//toevoegen van het element "element 4" aan de ArrayList
mijnLijst.Add("element 4");
Deze ArrayList bevat nu 4 elementen: "element 1", "element 2", "element 3" en "element 4"
.
Je kan ook elementen toevoegen op een bepaalde plaats in de ArrayList. Dit doe je met de methode Insert()
. Deze methode heeft 2 parameters: de index waar je het element wil toevoegen en het element zelf.
Net zoals bij een array, begint de index bij 0.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//toevoegen van het element "element 4" op index 1 in de ArrayList
mijnLijst.Insert(1, "element 4");
Bovenstaande code voegt het element “element 4” toe op plaats 1 in de ArrayList. De ArrayList bevat nu 4 elementen: "element 1", "element 4", "element 2" en "element 3".
Weet je waarom “element 4” op de tweede plaats in de ArrayList staat? En niet op de eerste plaats?
Je kan elementen verwijderen uit een ArrayList met de methode Remove()
. Deze methode verwijdert het eerste element dat overeenkomt met het meegegeven element.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//verwijderen van het element "element 2"
mijnLijst.Remove("element 2");
De ArrayList bevat nu 2 elementen: "element 1" en "element 3"
.
Je kan ook een element verwijderen op basis van zijn index. Dit doe je met de methode RemoveAt()
. Deze methode verwijdert het element op de meegegeven index.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//verwijderen van het element op index 2
mijnLijst.RemoveAt(2);
De ArrayList bevat nu 2 elementen: "element 1" en "element 2"
.
Je kan elementen ophalen uit een ArrayList op basis van hun index. Dit doe je door de index tussen vierkante haken[] te plaatsen achter de ArrayList.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//ophalen van het element op index 1
string element = mijnLijst[1];
//weergeven van het element
Console.WriteLine(element);
Deze code zal het volgende weergeven:
element 2
Je kan het aantal elementen in een ArrayList opvragen met de methode Count
.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//ophalen van het aantal elementen in de ArrayList
int aantalElementen = mijnLijst.Count;
//weergeven van het aantal elementen
Console.WriteLine(aantalElementen);
Deze code zal het volgende weergeven:
3
Er zijn twee manieren om alle elementen in een ArrayList te weergeven:
Je kan een for-loop gebruiken om alle elementen in een ArrayList te weergeven. De for-loop loopt door alle elementen in de ArrayList en weergeeft ze.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//weergeven van alle elementen in de ArrayList
for (int i = 0; i < mijnLijst.Count; i++){
Console.WriteLine(mijnLijst[i]);
}
Deze code zal het volgende weergeven:
element 1
element 2
element 3
De foreach-lus is nieuw voor jullie. Deze is speciaal ontworpen om door een collectie te loopen. De foreach-lus is een verkorte versie van de For-lus. De foreach-lus is dus een makkelijkere manier om door een collectie te loopen.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//weergeven van alle elementen in de ArrayList
foreach (var element in mijnLijst){
//binnen deze lus wordt bij elke iteratie het volgende element uit de ArrayList
// opgehaald en in de variabele element gestoken
Console.WriteLine(element);
}
Deze code zal het volgende weergeven:
element 1
element 2
element 3
Je ziet in de dat de variabele element van het type var
is. Dit betekent dat de compiler zelf het type van de variabele zal bepalen. Omdat de ArrayList een collectie is van string
-elementen, zal de compiler de variabele element
van het type string
maken. Maar pas op! Omdat een ArrayList een non-generic collectie is, kan je er alle soorten datypes in steken.
Dit maakt het mogelijk dat er fouten optreden:
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { 3, "element 2", 5,8 };
//som van alle elementen in de ArrayList
int som = 0;
foreach (var element in mijnLijst){
som += element;
}
Console.WriteLine(som);
Deze code zal een foutmelding geven:
error CS0019: Operator '+' cannot be applied to operands of type 'int' and 'string'
De compiler kan niet bepalen wat de som is van een int
en een string
. Dit is dus een voorbeeld van een runtime error. Dit is een fout die pas optreedt tijdens het uitvoeren van het programma.
De ArrayList heeft nog een aantal andere methodes die je kan gebruiken. Een overzicht van de methodes vind je hier7. Enkele veelgebruikte methodes zijn:
De Contains()
-methode controleert of een element in de ArrayList aanwezig is. Deze methode geeft een bool
terug. Als het element aanwezig is, geeft de methode true
terug. Als het element niet aanwezig is, geeft de methode false
terug.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//controle of het element "element 2" aanwezig is in de ArrayList
bool aanwezig = mijnLijst.Contains("element 2");
//indien het element aanwezig is, wordt toon "element 2 is aanwezig" weergegeven
if (aanwezig){
Console.WriteLine("element 2 is aanwezig");
}else{
Console.WriteLine("element 2 is niet aanwezig");
}
De Sort()
-methode sorteert de elementen in de ArrayList. De elementen worden gesorteerd op basis van hun natuurlijke orde. Dit betekent dat de elementen gesorteerd worden op basis van hun type. Zo worden int
-elementen gesorteerd van klein naar groot, string
-elementen worden gesorteerd op alfabetische volgorde, enzovoort.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 3", "element 1", "element 2" };
//sorteren van de ArrayList
mijnLijst.Sort();
//weergeven van de gesorteerde ArrayList
foreach (var element in mijnLijst){
Console.WriteLine(element);
}
Deze code zal het volgende weergeven:
element 1
element 2
element 3
De Reverse()
-methode keert de volgorde van de elementen in de ArrayList om.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//omkeren van de volgorde van de elementen in de ArrayList
mijnLijst.Reverse();
//weergeven van de omgekeerde ArrayList
foreach (var element in mijnLijst){
Console.WriteLine(element);
}
Deze code zal het volgende weergeven:
element 3
element 2
element 1
De IndexOf()
-methode geeft de index van een element in de ArrayList terug. Als het element niet in de ArrayList aanwezig is, geeft de methode -1
terug.
//declaratie en initialisatie van een ArrayList
ArrayList mijnLijst = new ArrayList() { "element 1", "element 2", "element 3" };
//opvragen van de index van het element "element 2"
int index = mijnLijst.IndexOf("element 2");
//weergeven van de index van het element
Console.WriteLine(index);
Deze code zal het volgende weergeven:
1