Programmeren in Java/Collections

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in Java In ontwikkeling. Revisiedatum: onbekend

Inleiding Redelijk ontwikkeld. Revisiedatum: 22 augustus 2008
  1. List Nog vrijwel niets. Revisiedatum: 24 november 2007
  2. Set Nog vrijwel niets. Revisiedatum: 24 november 2007
  3. Queue Nog vrijwel niets. Revisiedatum: 24 november 2007
  4. Map Nog vrijwel niets. Revisiedatum: 24 november 2007
Appendices

Een collectie is een verzameling van objecten (geen primitieve datatypes) die:

  • zijn eigen grootte beheert (er moet zelfs geen begin-grootte opgegeven worden), dit is in tegenstelling tot arrays.
  • een rijke verzameling methoden bezit om elementen toe te voegen, te verwijderen, te sorteren, op te zoeken, ...

Soorten interfaces[bewerken]

  • De Collection interface die een verzameling van objecten bevat. Deze interface wordt op zicht geïmplementeerd door drie andere interfaces:
    • List is een opeenvolging van elementen, dubbels mogen: ArrayList
    • Set met objecten zonder duplicaten: HashSet, LinkedHashSet
    • Queue is een hoop elementen die eruitgehaald worden in de omgekeerde volgorde van het toevoegen (FIFO: first in, first out); de queue-interface bevat extra methods om elementen toe te voegen en weg te halen: LinkedList, PriorityQueue
  • De Map interface die de elementen identificeert aan de hand van een (unieke sleutel,overeenkomstige waarde)-paar, zoals bij een hashtabel: HashMap, LinkedHashMap

Voorbeeld[bewerken]

Onderstaande is een kort voorbeeld van het gebruik van een ArrayList, wat een implementie is van de List interface.

 1 import java.util.ArrayList;
 2 
 3 class Main {
 4     public static void main(String[] args) {
 5         ArrayList<String> strings = new ArrayList<>();
 6         String text = "Stuk tekst.";
 7         strings.add(text);
 8         System.out.println(strings.get(0)); // Geeft als output: "Stuk tekst."
 9     }
10 }

In dit voorbeeld gebruiken we de import sleutel woord om de ArrayList toe te voegen. Op lijn 5 declareren we een ArrayList aan en geven we mee tussen de haakjes(<>) dat deze enkel Strings mag bevatten, na het =-teken makken we de ArrayList aan zoals we dat doen bij andere objecten. In lijn 6 wordt er een String aangemaakt die in lijn 7 toegevoegd word aan de ArrayList. In lijn 8 wordt die er terug uitgehaald en uitgeprint.

Niet generisch[bewerken]

Sinds de introductie van generische klassen in Java 1.5 is het mogelijk om te bepalen welke type klasses een collectie of map kan bevatten. Voordien was dit niet mogelijk en werden objecten zoals bijvoorbeeld strings als objecten bewaart in de collectie. Hierdoor ging verloren van welk type klasse een object was en was het aan de programmeur om dit te terug te casten in de juiste klasse als het bijvoorbeeld methodes van die specifieke klasse wilt gebruiken. Ook betekende dit als je bijvoorbeeld een collectie of map wou hebben met enkel objecten van het type Strings

Collection[bewerken]

Deze interface is de hoofdinterface binnen de hele hiërarchie van de collection interfaces. Een collection bevat een groep van objecten, ook wel elementen genoemd. Sommige collections laten duplicaten toe, andere dan weer niet. Sommige zijn dan weer geordend, andere niet. Standaard heeft Java geen enkele collection die deze interface rechstreeks implementeerd. Deze interface wordt op zicht geïmplementeerd door drie andere interfaces, namelijk List, Set en Queue. Die worden op zich geïmplementeerd door echte collections of door andere interfaces.

Java collection interfaces.svg

Deze interface bevat ondere andere volgende methodes:

  • add(E e): Voegt één element toe aan de collectie.
  • addAll(Collection<? extends E> c): Voegt de elementen van de gegeven collectie toe aan de collectie.
  • clear(): Verwijdert alle elementen uit een collectie. Enkel uit de collectie, het object zelf wordt niet verwijderd zolang het ergens anders nog wordt bijgehouden bijvoorbeeld in een variabele of een andere collectie.
  • contains(Object o): Kijkt of de collectie een bepaald object bevat, geeft true terug als dat zo is.
  • containsAll(Collection<?> c)
  • isEmpty(): Geeft true terug als de collectie leeg is.
  • iterator()
  • remove(Object o): Verwijdert het gegeven object uit de collectie.
  • removeAll(Collection<?> c): Verwijdert alle elementen uit de collectie die ook bestaan in de gegeven collectie.
  • retainAll(Collection<?> c):
  • size(): Geeft terug hoeveel elementen de collectie bevat.
  • toArray(): Geeft een array terug dat de elementen bevat van de collectie.
  • toArray(T[] a):

List[bewerken]

Set[bewerken]

Queue[bewerken]

Map[bewerken]

Eigen collectie[bewerken]

Je kunt een eigen implementatie ontwikkelen van deze interfaces, dit gebeurt op dezelfde manier als het implementeren van elke ander type interface via het sleutelwoord implements.

public class OwnImplementationOfList<E> implements List<E> {
    
}

Je bent dan natuurlijk wel verplicht om all methodes van die interface te implementeren. Hierbij moet je dan ook rekening houden met wat de regels zijn voor iedere methode die je implementeert. Dit doe je door naar de javadoc te kijken van de interface die je implementeer. Bijvoorbeeld:

/**
 * Returns {@code true} if this list contains no elements.
 *
 * @return {@code true} if this list contains no elements
 */
@Override
public boolean isEmpty() {
    //jouw code
}

De method isEmpty() moet dus true geven als hij leeg is, de implementatie die je dan schrijft moet dus verplicht true geven als je collectie geen elementen meer bevat. Het niet volgen van deze regels kan gevolgen hebben voor andere code of kan verwarring veroorzaken bij andere ontwikkelaars.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.