Programmeren in Java/Collections

Uit Wikibooks
Naar navigatie springen Naar zoeken springen


Programmeren in Java In ontwikkeling. Revisiedatum: onbekend

  1. Inleiding Redelijk ontwikkeld. Revisiedatum: 22 augustus 2008
  2. Basis Goed ontwikkeld. Revisiedatum: 24 november 2007
  3. In- & uitvoer In ontwikkeling. Revisiedatum: 24 november 2007
  4. Stringbewerkingen In ontwikkeling. Revisiedatum: 24 november 2007
  5. Arrays Nog vrijwel niets. Revisiedatum: 24 november 2007
  6. Collections Nog vrijwel niets. Revisiedatum: 24 november 2007
  7. Exceptions Redelijk ontwikkeld. Revisiedatum: 24 november 2007
  8. Generics Nog vrijwel niets. Revisiedatum: 24 november 2007
  9. Ingebouwde functies Nog vrijwel niets. Revisiedatum: 20 januari 2007
  10. Multithreading Nog vrijwel niets. Revisiedatum: 20 januari 2007
  11. GUI In ontwikkeling. Revisiedatum: 24 november 2007
  12. JSP: JavaServer Pages Redelijk ontwikkeld. Revisiedatum: 24 november 2007

Klassen

  1. Klassen Goed ontwikkeld. Revisiedatum: 24 november 2007
  2. Overerving In ontwikkeling. Revisiedatum: 20 januari 2007
  3. Geavanceerde klassen In ontwikkeling. Revisiedatum: 24 november 2007

Design Patterns

  1. Strategy Pattern Nog vrijwel niets. Revisiedatum: 26 december 2010

Appendices

  1. Appendix A: Installatie In ontwikkeling. Revisiedatum: 24 november 2007
  2. Appendix B: Javadoc In ontwikkeling. Revisiedatum: 24 november 2007


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]

  • echte Collection die de elementen met een index aangeven (zoals bij arrays)
    • Set met objecten zonder duplicaten: HashSet, LinkedHashSet
      • SortedSet gesorteerde set: TreeSet
    • List is een opeenvolging van elementen, dubbels mogen: ArrayList
    • 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
  • Map die de elementen identificeert aan de hand van een (unieke sleutel,overeenkomstige waarde)-paar, zoals bij een hashtabel: HashMap, LinkedHashMap
    • SortedMap met sleutels in stijgende volgorde: TreeMap


voorbeelden[bewerken]

ArrayList[bewerken]

integers[bewerken]

Java-code: RijLijst.java

import java.util.*;
public class RijLijst{
 public static void main(String[] args){
   ArrayList lijstA = new ArrayList();                     //met expliciete typecasting
   lijstA.add(0,new Integer(125));
   lijstA.add(1,new Integer(144));
   lijstA.add(2,new Integer(255));
   lijstA.add(3,new Integer(196));
   int getalA = ((Integer)lijstA.get(1)).intValue();
   System.out.println("Het tweede getal van de eerste reeks is: " + getalA);

   ArrayList<Integer> lijstB = new ArrayList<Integer>();   //zonder typecasting en zonder volgnummer
   lijstB.add(225);
   lijstB.add(244);
   lijstB.add(355);
   lijstB.add(296);
   int getalB = lijstB.get(2);
   System.out.println("Het derde getal van de tweede reeks is: " + getalB);
  }
}

De tweede mogelijke schrijfwijze zonder typecasting is een stuk eenvoudiger.

Het tweede getal van de eerste reeks is: 144
Het derde getal van de tweede reeks is: 355

Opgelet: de objecten zijn immutible, wat betekent dat de garbage collector veel objecten zal moeten weggooien als ermee gerekend wordt. Daarvoor hevel je de waarde beter eerst over naar echte integers.

Strings[bewerken]

Op dezelfde manier kan je Strings verwerken:

Java-code: personen.java

import java.util.*;
public class personen{
 public static void main(String[] args){
   ArrayList<String> personen = new ArrayList<String>();
   personen.add("Klaas Vaak");
   personen.add("Het Zandmannetje");
   personen.add("Sint-Niklaas");
   personen.add("Sint-Maarten");
   personen.add("Boe Man");
   System.out.println("Aantal=" + personen.size());

   for(int i = 0;i<personen.size();i++){                       //gewone for-loop
     System.out.print((i+1) + ". " + personen.get(i) + "\t");
   }
   System.out.println();
   
   Iterator it = personen.iterator();                          //d.m.v. een iterator
   while(it.hasNext()){
     System.out.print(it.next() + "\t");
   }
   System.out.println();

   for(String p : personen){                                   //enhanced for-loop
     System.out.print(p + "\t");
   }
}
}

Door middel van het volgnummer, kan je een bepaald element uit de array kiezen. Wil je ze gewoon overlopen, dan kan je (bij alle soorten collections) gebruik maken van de universele Iterator.

Aantal=5
1. Klaas Vaak	2. Het Zandmannetje	3. Sint-Niklaas	4. Sint-Maarten	5. Boe Man	
Klaas Vaak	Het Zandmannetje	Sint-Niklaas	Sint-Maarten	Boe Man	
Klaas Vaak	Het Zandmannetje	Sint-Niklaas	Sint-Maarten	Boe Man	

HashMap[bewerken]

Java-code: Main.java

import java.util.*;
public class Main {
  public static void main(String[] args){
    HashMap<String, String> steden = new HashMap<String, String>();
 
    steden.put("9000","Gent");
    steden.put("1000","Brussel");
    steden.put("1011 AA","Ruijterkade (Amsterdam)");

    Iterator it = steden.keySet().iterator();

    while(it.hasNext()) {
      String postcode = (String)it.next();
      String stad = steden.get(postcode);
      System.out.println(stad + " heeft postcode " + postcode + "."); 
    }
  }
}

De volgorde is niet volgens postcode, maar volgens de hash-waarde van de postcode. Deze is moeilijk te voorspellen, en daarom kan je ze als willekeurig beschouwen.

Brussel heeft postcode 1000.
Gent heeft postcode 9000.
Ruijterkade (Amsterdam) heeft postcode 1011 AA.


TreeMap[bewerken]

Java-code: Main.java

import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Map <String, Kind> myMap = new TreeMap<>();
        myMap.put("Lukas", new Kind("Lukas",5,1.20));
        myMap.put("Luuk", new Kind("Luuk",8,1.00));
        myMap.put("Sandra", new Kind("Sandra",3,0.60));
        myMap.put("Barbara", new Kind("Barbara",5,1.10));
        myMap.put("Sandra", new Kind("Sandra",10,1.28));

        for (Map.Entry<String, Kind> stringKindEntry : myMap.entrySet()) {
            System.out.println(stringKindEntry);
        }
    }
}

Een TreeMap is een geordende en gesorteerde Map die entries in een boomstructuur bewaard. Deze entries worden automatisch gesorteerd op key dus de key moet Comparable zijn.

Barbara=Barbara (5j) is 1.1m groot
Lukas=Lukas (5j) is 1.2m groot
Luuk=Luuk (8j) is 1.0m groot
Sandra=Sandra (10j) is 1.28m groot


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