H21. en H22. COLLECTIONS FRAMEWORK. 1. INLEIDING.

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 14: Exception Handling JAVA -- H14.
Advertisements

Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
JAVA1 H 16. MULTITHREADING. 1. INLEIDING. Threads: delen van het programma die in concurrentie met elkaar gelijktijdig in executie gaan. Thread is een.
Programmeren in Java met BlueJ
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Van domeinklasse tot implementatie
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
automatische garbage collection klein object georiënteerd betrouwbaar
Klasse Stringbuffer Wanneer een String object gecreëerd wordt, kan de inhoud ervan nooit meer veranderen Stringbuffer wordt gebruikt voor zogenaamde.
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Klassen en objecten.
AAHA (voor intern gebruik)
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Server side scripting 1 Webtechnologie Lennart Herlaar.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
Inleidend probleem Data structuur (hiërarchie van classes)
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Project OO-AD: Color Crazy Domien Nowicki, Bjorn Schobben.
JAVA -- H81 Exception: ongewone of foutieve situatie->prog. mislukt kan onderschept en afgehandeld worden. = een object van de klasse Throwable, gegenereerd.
Hoofdstuk 2 : Inleiding tot Java Applicaties
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Hibernate Object relational mapping
Algoritmiek Strings & Stringmanipulaties; Controle Structuren; Floating-point notation. Hoorcollege 4 - Ma. 25 sept L.M. Bosveld-de Smet.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
Tussentoets Digitale Techniek. 1 november 2001, 11:00 tot 13:00 uur. Opmerkingen: 1. Als u een gemiddeld huiswerkcijfer hebt gehaald van zes (6) of hoger,
JAVA1 Hoofdstuk 2: Inleiding tot Java Applicaties.
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
JAVA UTILITIES PACKAGE EN BIT-MANIPULATIE
Klasse StringBuffer Nadat een String object gecreëerd is, kan de inhoud ervan nooit meer veranderen StringBuffer wordt gebruikt voor zogenaamde.
Hoofdstuk 5 – Object Based Programmeren
6.1 Inleiding HOOFDSTUK 6 METHODEN
1 Hoofdstuk 11: Strings en karakters Inleiding In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer.
Hoofdstuk 2: Inleiding tot Java Applicaties
HOOFDSTUK 7 ARRAYS 7.1.     INLEIDING Array
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Beginselen van C opgaves… volgende week: ARM.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Hoofdstuk 9 Objecten en klassen.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Internetapplicaties - IV Collecties 1 Internetapplicaties Deel 4: Java hulpklassen: Collecties.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
Plan Coordination by Revision in Collective Agent Based Systems Adriaan ter Mors en Gijsbert Deelder Plan Coordination by Revision in Collective.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Algoritmiek Class Hierarchies, Inheritance. Hoorcollege 12 - Ma. 20 nov L.M. Bosveld-de Smet.
Project OO-AD: Color Crazy Domien Nowicki, Bjorn Schobben.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Gameprogrammeren: Lists en interfaces
H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING.
Software Development fundamentals
Transcript van de presentatie:

H21. en H22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Meest voorkomende datastructuren gestandaardiseerd en efficient geïmplementeerd. Goed voorbeeld van herbruikbare code JAVA

2. OVERZICHT COLLECTIONS FRAMEWORK Data structuur (object) die referenties naar andere objecten bijhoudt. Collections framework Interfaces die de operaties declareren voor verschillende collection types en verschillende implementaties (classes) daarvan. Behoren tot het package java.util Set List Map JAVA

2. OVERZICHT COLLECTIONS FRAMEWORK Interface Collection Interface List Interface Set Interface Map JAVA

Klasse Arrays (public class Arrays extends Object) Voorziet static methoden voor manipulatie van arrays Methode asList voor conversie naar een List Methode binarySearch voor het zoeken in geordende arrays Methode equals voor het vergelijken Method fill voor waarden in te brengen Method sort voor sorteren JAVA

3. CLASS ARRAYS : Voorbeeld methoden. import java.util.*; public class UsingArrays { private int intValues[] = { 1, 2, 3, 4, 5, 6 }; private double doubleValues[] = { 8.4, 9.3, 0.2, 7.9, 3.4 }; private int filledInt[], intValuesCopy[]; public UsingArrays() // initialize arrays filledInt = new int[ 10 ]; intValuesCopy = new int[ intValues.length ]; // vul filledInt volledig op met 7’s Arrays.fill( filledInt, 7 ); // sorteer doubleValues in oplopende volgorde Arrays.sort( doubleValues ); // copy array intValues naar array intValuesCopy System.arraycopy( intValues, 0, intValuesCopy, 0, intValues.length ); } JAVA

3. Methode arraycopy // copy array intValues naar array intValuesCopy System.arraycopy( intValues, 0, intValuesCopy, 0, intValues.length ); static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) Parameters: src - de source array. srcPos - start positie in de source array. dest - de destination array. destPos - start positie in de destination array. length – aantal elementen die gekopieerd moeten worden. Werpt: IndexOutOfBoundsException – indien de grenzen van src of dest overschreden worden. ArrayStoreException – indien het type van de array src niet in dest geplaatst kan worden. NullPointerException – indien src of dest null is. JAVA

3. CLASS ARRAYS : Voorbeeld methoden. public void doiets() { //vergelijk de inhoud van beide arrays boolean b = Arrays.equals( intValues, intValuesCopy ); //... // element opzoeken in intValues[] = {1, 2, 3, 4, 5, 6} int location= Arrays.binarySearch( intValues, value ); //indien value = 5 returns 4 //indien value = 8763 returns –7 // -7 = de indexwaarde_in_geval_van_invoegen*-1 -1 } JAVA

3. CLASS ARRAYS : overloaded methoden static int binarySearch(int[] a, int key) static int binarySearch(double[] a, double key) Idem voor char, byte, short, long en float static int binarySearch(Object[] a, Object key) static int binarySearch(Object[] a, Object key, Comparator c)  zie paragraaf 6. static boolean equals(int[] a, int[] a2) Idem voor char, byte, short, long, float en double static boolean equals(Object[] a, Object[] a2) JAVA

3. CLASS ARRAYS : overloaded methoden static void fill(int[] a, int val) static void fill(int[] a, int fromIndex, int toIndex, int val) IllegalArgumentException – if fromIndex > toIndex ArrayIndexOutOfBoundsException – if fromIndex < 0 of toIndex > a.length Idem voor char, byte, short, long, float, double en object JAVA

3. CLASS ARRAYS : overloaded methoden static void sort(int[] a) static void sort(int[] a, int fromIndex, int toIndex) IllegalArgumentException – if fromIndex > toIndex ArrayIndexOutOfBoundsException – if fromIndex < 0 of toIndex > a.length Idem voor char, byte, short, long, float en double static void sort(Object[] a) static void sort(Object[] a, Comparator c) static void sort(Object[] a, int fromIndex, int toIndex) static void sort(Object[] a, int fromIndex, int toIndex, Comparator c)  zie paragraaf 6. JAVA

3. CLASS ARRAYS : static methode asList static methode asList laat toe een array-object als een List (zie verder) te doorlopen. Wijzigen op de elementen via de List view zijn effectief in het array-object, en vise versa. Opm: de List is wel van vaste lengte (geen add of remove!). Voorbeeld: import java.util.*; public class UsingAsList { private static final String values[] = { "red", "white", "blue" }; private List list; // initialiseer List en wijzig (set methode) de waarde // op locatie 1 public UsingAsList() { list = Arrays.asList( values ); // get List list.set( 1, "green" ); // wijzig een waarde } JAVA

3. CLASS ARRAYS : static methode asList // output via List en via array public void printElements() { System.out.print( "List elements : " ); for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); System.out.print( "\nArray elements: " ); for ( int count = 0; count < values.length; count++ ) System.out.print( values[ count ] + " " ); System.out.println(); } public static void main( String args[] ) new UsingAsList().printElements(); List elements : red green blue Array elements: red green blue JAVA

4. INTERFACE COLLECTION EN KLASSE COLLECTIONS. Bevat bulk operations (op de volledige container) Adding, clearing, comparing en retaining objects Interfaces Set en List extends interface Collection Voorziet een Iterator: dient om alle elementen van een collection te doorlopen. De Iterator kan ook elementen verwijderen. Klasse Collections ( zie paragraaf 6) Voorziet static methoden die collections manipuleren Polymorfisme wordt hierbij ondersteund JAVA

4 BIS. INTERFACE ITERATOR EN LISTITERATOR. boolean hasNext() Object next() void remove() //optional Interface ListIterator extends Iterator void add(Object o) //optional boolean hasPrevious() int nextIndex() Object previousIndex() void set(Object o) //optional JAVA

De klasse Stack is een subklasse van Vector. 5. LIST INTERFACE. Interface Collection Interface List ArrayList, LinkedList en Vector zijn implementatie klassen van interface List. De klasse Stack is een subklasse van Vector. JAVA

5. LIST INTERFACE. TYPE-CASTING Alles wat we in een list plaatsen, wordt eerst geconverteerd naar een object van klasse Object. Hieruit volgt dat we alles erin kunnen plaatsen wat we willen. Maar om er iets uit te krijgen, moeten we eerst weten waarnaar het moet worden gecast! JAVA

5. LIST INTERFACE. List Geordende Collection waarbij duplicaten toegelaten zijn: SEQUENCE. List index start ook van nul. Implementatie klassen: ArrayList (resizable-array implementatie) LinkedList (linked-list implementatie) Vector (zoals ArrayList maar synchronized) JAVA

5. Voorbeeld : ARRAYLIST import java.awt.Color; import java.util.*; public class CollectionTest { private static final String colors[]={ "red","white","blue"}; public CollectionTest() List list = new ArrayList(); // opvullen van de Arraylist list.add( Color.MAGENTA ); // toevoegen van color object for ( int count = 0; count < colors.length; count++ ) list.add( colors[ count ] ); // van string objecten list.add( Color.CYAN ); // van color object JAVA

5. Voorbeeld : ARRAYLIST // afdrukken System.out.println( "\nArrayList: " ); for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); // verwijder alle String objecten removeStrings( list ); System.out.println( //opnieuw afdrukken "\n\nArrayList after calling removeStrings: " ); } JAVA

5. Voorbeeld : ARRAYLIST private void removeStrings( Collection collection ) { Iterator iterator = collection.iterator(); // get iterator while ( iterator.hasNext() ) if ( iterator.next() instanceof String ) iterator.remove(); // remove String object } public static void main( String args[] ) { new CollectionTest(); ArrayList: java.awt.Color[r=255,g=0,b=255] red white blue java.awt.Color [r=0,g=255,b=255]   ArrayList after calling removeStrings: java.awt.Color[r=255,g=0,b=255] java.awt.Color[r=0,g=255,b=255] JAVA

Oefening: bulk operaties en arrayList. Collection interface: boolean add(Object o); boolean addAll(Collection c); void clear(); boolean contains(Object o); boolean containsAll(Collection o); boolean equals(Object o); int hashCode(); boolean isEmpty(); Iterator iterator(); boolean remove(Object o); boolean removeAll(Collection c); boolean retainAll(Collection c); int size(); Object[] toArray(); Object[] toArray(Object [] a); String arX[] = {"appel", "peer", "citroen", "kiwi"}, arY[] = {"banaan", "mango", "citroen", "kiwi", "zespri"} Behandel arX en arY als Collections en maak gebruik van de bulk operaties om volgende output te leveren: In y zit extra [banaan, mango, zespri] In x zit extra [appel, peer] x en y hebben gemeenschappelijk [citroen, kiwi] JAVA

Oefening: bulk operaties en arrayList. String arX[] = {"appel", "peer", "citroen", "kiwi"}, arY[] = {"banaan", "mango", "citroen", "kiwi", "zespri"} In y zit extra [banaan, mango, zespri] In x zit extra [appel, peer] x en y hebben gemeenschappelijk [citroen, kiwi] arrayList = new ArrayList(collection) Interface Collection: boolean removeAll(Collection c)           Removes all this collection's elements that are also contained in the specified collection.   boolean retainAll(Collection c)           Retains only the elements in this collection that are contained in the specified collection (optional operation). JAVA

Oplossing: bulk operaties en arrayList. Collection x = Arrays.asList(arX), y = Arrays.asList(arY); ArrayList res = new ArrayList(y); res.removeAll(x); System.out.println(“In y zit extra " + res); res = new ArrayList(x); res.removeAll(y); System.out.println(“In x zit extra " + res); res.retainAll(y); System.out.println("x en y hebben gemeenschappelijk "+ res); JAVA

5. Voorbeeld : LINKEDLIST 1 import java.util.*; public class ListTest { private static final String colors[] = { "black", "yellow", "green", "blue", "violet", "silver" }; private static final String colors2[] = { "gold", "white", "brown", "blue", "gray", "silver" }; // aanmaak en manipulatie van LinkedList objects public ListTest() List link = new LinkedList(); List link2 = new LinkedList(); // beide lijsten opvullen for ( int count = 0; count < colors.length; count++ ) { link.add( colors[ count ] ); link2.add( colors2[ count ] ); } JAVA

5. Voorbeeld : LINKEDLIST 1 // ‘plak’ link2 achter link link.addAll( link2 ); // concatenatie van lists link2 = null; // release resources printList( link ); uppercaseStrings( link ); System.out.print( "\nDeleting elements 4 to 6..." ); removeItems( link, 4, 7 ); printReversedList( link ); } // einde constructor ListTest JAVA

5. Voorbeeld : LINKEDLIST 1 public void printList( List list ) { for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); } public void printList( Collection collection ) Iterator iterator = collection.iterator(); while ( iterator.hasNext() ) System.out.println(iterator.next()); JAVA

5. Voorbeeld : LINKEDLIST 1 // localiseer String objecten en converteer naar // hoofdletters private void uppercaseStrings( List list ) { ListIterator iterator = list.listIterator(); while ( iterator.hasNext() ) Object object = iterator.next(); // get item if ( object instanceof String ) // check for String iterator.set( ( ( String ) object ).toUpperCase() ); } JAVA

5. Voorbeeld : LINKEDLIST 1 // gebruik sublist view om een reeks element te verwijderen //van start t.e.m. end-1 private void removeItems( List list, int start, int end ) { list.subList( start, end ).clear(); // verwijder items } // druk de lijst van eind naar begin private void printReversedList( List list ) ListIterator iterator = list.listIterator( list.size() ); System.out.println( "\nReversed List:" ); while( iterator.hasPrevious() ) System.out.print( iterator.previous() + " " ); public static void main( String args[] ) new ListTest(); } // end class ListTest JAVA

5. Voorbeeld : LINKEDLIST 1 black yellow green blue violet silver gold white brown blue gray silver   BLACK YELLOW GREEN BLUE VIOLET SILVER GOLD WHITE BROWN BLUE GRAY SILVER Deleting elements 4 to 6... BLACK YELLOW GREEN BLUE WHITE BROWN BLUE GRAY SILVER Reversed List: SILVER GRAY BLUE BROWN WHITE BLUE GREEN YELLOW BLACK JAVA

5. Voorbeeld : LINKEDLIST 2 import java.util.*; public class UsingToArray { // create LinkedList, add elements and convert to array public UsingToArray() String colors[] = { "black", "blue", "yellow" }; LinkedList links = new LinkedList( Arrays.asList( colors ) ); links.addLast( "red" ); // add als laaste item links.add( "pink" ); // add als laaste item links.add( 3, "green" ); // insert op de 3de index plaats links.addFirst( "cyan" ); // add als eerste item JAVA

5. Voorbeeld : LINKEDLIST 2 // get LinkedList elements als een array colors=(String []) links.toArray(new String[ links.size() ]); // ... Levert volgende lijst:cyan, black, blue, yellow, green, red, pink Argument van toArray(Object [] a) - als a te klein is : er wordt een nieuwe array van hetzelfde runtime type aangemaakt. - als a groters is: de meegegeven array wordt gebruikt, de overige originele elementen blijven behouden behalve het element op plaats a[size] wordt null. JAVA

Oefening: List Implementaties. Extra methoden Interface List: void add(int index, Object o); boolean addAll(int index, Collection c); Object get(int index); int indexOf(Object o); lastIndexOf(Object o); ListIterator listIterator(); ListIterator listIterator(int index); Object remove(int index); Object set(int index, Object o); List subList(int fromIndex, int toIndex); Extra methoden LinkedList: LinkedList(); LinkedList(Collection c) ;void addFirst(Object o); void addLast(Object o); Object clone(); Object getFirst(); Object getLast(); Object removeFirst(); Object removeLast(); String toString(); Extra methoden ArrayList: ArrayList(); ArrayList(int initialCapacity); ArrayList(Collection c); Object clone(); void ensureCapacity(int minCapacity); String toString(); void trimToSize(); JAVA

Oefening: List Implementaties. Er zijn een aantal kisten met fruit... Voeg de verschillende kisten samen in een ArrayList list. Verwijder alle fruit dat met de letter ‘p’ begint uit de list. Gebruik hiervoor een eigen klasse CollectionOperaties met een methode verwijderOpLetter. Verwijder alle fruit uit de list vanaf het eerste voorkomen van kiwi tot het laatste voorkomen van kiwi, gebruik eveneens een methode verwijderSequence uit je klasse CollectionOperaties. Plaats het resultaat terug in een array mand en sorteer die oplopend. String kist[][] = { {"appel", "peer", "citroen", "kiwi", "perzik"}, {"banaan", "mango", "citroen", "kiwi", "zespri", "pruim"}, {"peche", "lichi", "kriek", "kers", "papaya"} }; ArrayList list; String mand[]; JAVA

Oplossing : List Implementaties. //... ArrayList list= new ArrayList(); for(int i = 0; i< kist.length; i++) list.addAll(Arrays.asList(kist[i])); CollectionOperaties.verwijderOpLetter(list, 'p'); CollectionOperaties.verwijderSequence(list, "kiwi"); String mand[] = (String[]) list.toArray(new String[list.size()]); Arrays.sort(mand); JAVA

Oplossing : List Implementaties. class CollectionOperaties { public static boolean verwijderOpLetter(Collection c, char letter) { boolean changed = false; Iterator it = c.iterator(); Object o; while (it.hasNext()) { if ( (o=it.next()) instanceof String && ((String) o).charAt(0)==letter ) { it.remove(); changed=true; } return changed; JAVA

Oplossing : List Implementaties. public static boolean verwijderSequence(List li, Object limit) { boolean changed = false; int first = li.indexOf(limit), last = li.lastIndexOf(limit); if (first!=-1) { li.subList(first, last+1).clear(); changed=true; } return changed; JAVA

H21: Klasse Vector – klasse ArrayList De klasse Vector is een verouderde klasse en wordt vervangen door de nieuwe klasse ArrayList. Klasse ArrayList bevat bijna dezelfde methodes als de klasse Vector. Een groot verschil is dat ArrayList niet gesynchroniseerd is en een Vector wel. JAVA

H 21. KLASSE Vector: methode add Vector vector = new Vector(); //capaciteit = 10 elementen vector.add( "magenta" ); magenta 0 1 2 ... 9 vector.add( "cyan" ); //  "cyan" wordt op het einde van // de vector toegevoegd, dus op index 1 magenta cyan try { vector.add( 1, "green" ); } //op index 1 wordt // "green" toegevoegd catch (ArrayIndexOutOfBoundsException exception) { exception.printStackTrace(); } magenta green cyan 0 1 2 3 ... 9 JAVA

H 21. KLASSE Vector: methode get en type-casting Vector vector = new Vector(); String mijnString = "red"; JButton mijnButton = new JButton("kleur"); Integer mijnGetal = new Integer(5); vector.add(mijnString); vector.add(mijnButton); vector.add(mijnGetal); try { String nieuweString = (String) vector.get(0); JButton nieuweButton = (JButton) vector.get(1); Integer nieuwGetal = (Integer) vector.get(2); }//werpt een exception indien index < 0 of index >= size() catch (ArrayIndexOutOfBoundsException exception) { exception.printStackTrace(); } JAVA

H 21. KLASSE Vector: methodes set en setElementAt Vector vector = new Vector(); vector.add( "magenta" ); vector.add( "green" ); try { String color = (String) vector.set(1,"red"); System.out.println( "Het oorspronkelijk kleur was: " + color + "\n" ); vector.setElementAt("white",0); }//werpt een exception indien index<0 of index >= size() catch (ArrayIndexOutOfBoundsException exception) { exception.printStackTrace();} De vector bevat, na de set en setElementAt methodes, op index 0 het object "white" en op index 1 "red". Op het scherm wordt weergegeven: Het oorspronkelijke kleur was: green JAVA

H 21. KLASSE Vector: methodes firstElement en lastElement Methode firstElement Geeft de referentie van het eerste object van de Vector terug Methode lastElement Geeft de referentie van het laatste object van de Vector terug // het eerste en laatste element weergeven try { System.out.println( "First element: " + vector.firstElement() ); System.out.println( "Last element: " + vector.lastElement() ); } // catch exception indien de vector leeg is catch ( NoSuchElementException exception ) { exception.printStackTrace(); } JAVA

H 21. KLASSE Vector: methodes contains en indexOf Methode contains contains(object) Geeft true terug indien het "object" in de Vector voorkomt, anders false. // bevat de vector al dan niet "red"? if ( vector.contains( "red" ) ) System.out.println( "\n\"red\" found at index " + vector.indexOf( "red" ) + "\n" ); else System.out.println( "\n\"red\" not found\n" ); JAVA

H 21. KLASSE Vector: methode remove, removeElementAt en removeAllElements Voorbeeld: ... vector.remove("red"); try { String verwijderdeKleur = (String) vector.remove(1); vector.removeElementAt(0); } // catch exception indien de index < 0 of index >= size() catch (ArrayIndexOutOfBoundsException exception) exception.printStackTrace(); vector.removeAllElements(); JAVA

H 21. KLASSE Vector en interface Enumeration private void printVector( Vector vectorToOutput ) { if ( vectorToOutput.isEmpty() ) System.out.print( "vector is empty" ); else { // iterate through the elements System.out.print( "vector contains: " ); Enumeration items = vectorToOutput.elements(); while ( items.hasMoreElements() ) System.out.print( items.nextElement() + " " ); } System.out.println( "\n" ); De methode printVector zal alle objecten in de vector weergeven op het scherm. JAVA

H 21. KLASSE Vector: methodes isEmpty en elements Methode isEmpty Geeft true terug indien de vector leeg is (= size is gelijk aan 0), anders false. Methode elements Geeft een enumeration terug zodat we de vector kunnen doorlopen: alle objecten van index 0 t.e.m. index "size()-1". JAVA

H 21. INTERFACE Enumeration De interface Enumeration bevat twee methodes: hasMoreElements en nextElement Methode hasMoreElement Geeft true terug indien de enumeration nog objecten bevat, anders false. Methode nextElement Geeft de referentie terug van het volgend object in de Vector . Werpt een NoSuchElementException indien er geen objecten meer zijn. JAVA

H 21. KLASSE Stack Klasse java.util.Stack In een stack kunnen we objecten plaatsen (push()) en objecten ophalen (pop()) of de top bekijken (peek()). Stacks werken volgens het LIFO-principe (Last In, First Out), wat betekent dat het laatste object dat we op de stack hebben geplaatst (push()) het eerste is dat we met de methode pop() ontvangen. JAVA

De klasse Stack is een subklasse van Vector. H 21. KLASSE Stack Klasse java.util.Stack De klasse Stack is een subklasse van Vector. Dit betekent dat we een stack kunnen maken en deze kunnen gebruiken zonder ons druk te maken over hoeveel objecten we er uiteindelijk willen in opslaan. JAVA

H 21. KLASSE Stack: constructor Er is één constructor voor de klasse Stack: stack1 = new Stack() Creëert een lege stack met capaciteit van 10 objecten en met de "default capacity increment". JAVA

H 21. KLASSE Stack: methodes De Klasse Stack bevat vijf eigen methodes: push, pop, empty, peek en search. Methode push Een object op de stack plaatsen. Methode pop Een object van de stack afhalen. Methode empty Geeft true terug indien de stack leeg is, anders false. JAVA

H 21. KLASSE Stack: methodes Methode peek peek() Geeft de referentie van het object terug dat bovenaan op de stack staat (= top van de stack). Methode search search(object) Geeft een geheel getal terug waarmee we aan de weet komen hoever onder in de stack het "object" zich bevindt. De top van de stack wordt als afstand één beschouwd. Indien het "object" niet voorkomt, dan geeft de methode –1 terug. JAVA

Een lege Stack wordt gecreëerd. H 21.     KLASSE StackTest import java.util.*; public class StackTest { public StackTest() Stack stack = new Stack(); // objecten creëren om in de stack te plaatsen Boolean bool = Boolean.TRUE; Character character = new Character( '$' ); Integer integer = new Integer( 34567 ); String string = "hello"; // push methode gebruiken stack.push( bool ); printStack( stack ); stack.push( character ); printStack( stack ); stack.push( integer ); printStack( stack ); stack.push( string ); printStack( stack ); Een lege Stack wordt gecreëerd. methode push voegt een Object op de top van de Stack toe. JAVA

H 21.      KLASSE StackTest // verwijder objecten van de stack try { Object removedObject = null; while ( true ) removedObject = stack.pop(); // gebruik pop methode System.out.println( removedObject.toString() + " popped" ); printStack( stack ); } // catch exception indien methode pop op een lege stack // werd uitgevoerd. catch ( EmptyStackException emptyStackException ) { emptyStackException.printStackTrace(); } //einde constructor StackTest methode pop verwijdert het object dat op de top van de Stack staat. JAVA

H 21.      KLASSE StackTest Stack erft van Vector, dus de klasse Stack kan ook de methode elements gebruiken. Alle objecten van de stack worden doorlopen door behulp van Enumeration. private void printStack( Stack stack ) { if ( stack.empty() ) System.out.print( "stack is empty" ); else System.out.print( "stack contains: " ); Enumeration items = stack.elements(); // stack doorlopen while ( items.hasMoreElements() ) System.out.print( items.nextElement() + " " ); } System.out.println( "\n" ); // naar de volgende lijn public static void main( String args[] ) { new StackTest(); } } // einde klasse StackTest De top van de Stack wordt als laatste weergegeven op het scherm. JAVA

H 21. KLASSE StackTest hello 34567 $ true stack contains: true   stack contains: true $ stack contains: true $ 34567 stack contains: true $ 34567 hello hello popped 34567 popped $ popped true popped stack is empty java.util.EmptyStackException at java.util.Stack.peek(Stack.java:79) at java.util.Stack.pop(Stack.java:61) at StackTest.<init>(StackTest.java:32) at StackTest.main(StackTest.java:63) hello 34567 $ true JAVA

Oefening: Stack en LinkedList. Herschrijf je eigen klasse Stack, door gebruik te maken van LinkedList. Methode push Methode pop Methode empty Methode peek Methode search JAVA

Oplossing: Stack en LinkedList. class EigenStack { private LinkedList stack; public EigenStack() { stack = new LinkedList(); } public Object peek() { if (stack.isEmpty()) throw new EmptyStackException() ; else return stack.get(0); } JAVA

Oplossing: Stack en LinkedList. public boolean empty() { return stack.isEmpty(); } public void push(Object element) { stack.addFirst(element); } public Object pop() { if (!stack.isEmpty()) return stack.removeFirst(); else throw new EmptyStackException() ; } JAVA

Oplossing: Stack en LinkedList. public int search(Object element) { Iterator it = stack.iterator(); int teller = 1; while (it.hasNext()) if (element.equals(it.next())) return teller; teller++; } return -1; JAVA

6. ALGORITME: public class Collections extends Object Het Collections framework voorziet een aantal algoritmen (static methoden) List algoritmen: sort binarySearch reverse shuffle fill copy Collection algoritmen: min max JAVA

6. ALGORITME : sort Sorteervolgorde : wordt bepaald door de implementatie van de bij het object horende compareTo methode. Wordt gedeclareerd in de interface Comparable. Deze sorteervolgorde wordt de ‘natuurlijke ordening’ genoemd. De sorteermethode is ‘stable’, bij gelijke waarden blijft de oorspronkelijke volgorde behouden. Een andere sorteervolgorde verkrijg je door een tweede argument mee te geven : dit is een Comparator object. Voorgedefinieerde comparator objecten. Collections.reverseOrder() Zelfgedefinieerde comparator objecten.

6. ALGORITME : sort Volgens natuurlijke ordening: Comparable: private static final String suits[] = { "Hearts", "Diamonds", "Clubs", "Spades" }; Volgens natuurlijke ordening: Comparable: List list = new ArrayList( Arrays.asList( suits ) );//create Collections.sort( list ); // ArrayList Met voorgedefinieerde Comparator (dalend): List list = Arrays.asList( suits ); // create List Collections.sort( list, Collections.reverseOrder() ); Met zelfgedefinieerde Comparator: Een ArrayList van Time2 objecten. public class Time2 //zie hoofdstuk 8. { private int hour, minute, second; //constructors, accessors, mutators, toString ... } JAVA

6. ALGORITME : sort : zelfgedefinieerde Comparator. import java.util.*; public class Sort3 { public void printElements() List list = new ArrayList(); list.add( new Time2( 6, 24, 34 ) ); list.add( new Time2( 18, 14, 05 ) ); list.add( new Time2( 12, 07, 58 ) ); list.add( new Time2( 6, 14, 22 ) ); list.add( new Time2( 8, 05, 00 ) ); // output List elements System.out.println( "Unsorted array elements:\n" + list ); // sort in order using a comparator Collections.sort( list, new TimeComparator() ); System.out.println( "Sorted list elements:\n" + list ); } public static void main( String args[] ) { new Sort3().printElements(); JAVA

6. ALGORITME : sort : zelfgedefinieerde Comparator. private class TimeComparator implements Comparator { int hourCompare, minuteCompare, secondCompare; Time2 time1, time2; // >0  object1>object2 <0  object1<object2 =0  obj.1=obj.2 public int compare( Object object1, Object object2 ) time1 = ( Time2 ) object1; // cast de objecten naar time2 = ( Time2 ) object2; // werkelijk type hourCompare = new Integer( time1.getHour() ).compareTo( new Integer( time2.getHour() ) ); if ( hourCompare != 0 ) // test het uur eerst return hourCompare; minuteCompare = new Integer( time1.getMinute()).compareTo( new Integer( time2.getMinute() ) ); if ( minuteCompare != 0 ) // dan de minuten return minuteCompare; secondCompare = new Integer( time1.getSecond()).compareTo( new Integer( time2.getSecond() ) ); return secondCompare; // tenslotte de seconden } JAVA

• Verdeelt de elementen van een list in een willekeurige volgorde. 6. ALGORITME : shuffle. Unsorted array elements: [06:24:34, 18:14:05, 08:05:00, 12:07:58, 06:14:22] Sorted list elements: [06:14:22, 06:24:34, 08:05:00, 12:07:58, 18:14:05] Algoritme shuffle. • Verdeelt de elementen van een list in een willekeurige volgorde. Voorbeeld: class Card //zie ook hfdst 11.7 { private String face, suit; //...constructor/get/set/toString } JAVA

6. ALGORITME : shuffle voorbeeld. public class Cards { private static final String suits[] = { "Hearts", "Clubs", "Diamonds", "Spades" }; private static final String faces[] ={ "Ace","Deuce","Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; private List list; // maak stapel kaarten en schud door elkaar public Cards() Card deck[] = new Card[ 52 ]; for ( int count = 0; count < deck.length; count++ ) deck[ count ] = new Card( faces[ count % 13 ], suits[ count / 13 ] ); list = Arrays.asList( deck ); Collections.shuffle( list ); } //... JAVA

6. ALGORITME : reverse, fill, copy, min, max. import java.util.*; public class Algorithms1 { private String letters[] = { "P", "C", "M" }, lettersCopy[]; private List list, copyList; public Algorithms1() list = Arrays.asList( letters ); // get List lettersCopy = new String[ 3 ]; copyList = Arrays.asList( lettersCopy ); System.out.println( "Initial list: " ); output( list ); Collections.reverse( list ); // reverse order System.out.println("\nAfter calling reverse: "); output(list); JAVA

6. ALGORITME : reverse, fill, copy, min, max. Collections.copy( copyList, list ); //copy List //overschrijft de elementen van copyList :dupliceert // de objecten referenties //als er copyList.size() > list.size(): // overige (laatste) elementen blijven ongewijzigd //als er copyList.size() < list.size(): // IndexOutOfBoundsException System.out.println( "\nAfter copying: " ); output(copyList); Collections.fill( list, "R" ); // fill list with R’s System.out.println( "\nAfter calling fill: " ); output(list); } JAVA

6. ALGORITME : reverse, fill, copy, min, max. private void output( List listRef ) { System.out.print( "The list is: " ); for ( int k = 0; k < listRef.size(); k++ ) System.out.print( listRef.get( k ) + " " ); System.out.print( "\nMax: " + Collections.max( listRef ) ); System.out.println( " Min: " + Collections.min( listRef ) ); }// er is ook een overloaded versie max en min met Comparator public static void main( String args[] ) { new Algorithms1(); } } Initial list: The list is: P C M Max: P Min: C   After calling reverse: The list is: M C P   After copying: The list is: M C P Max: P Min: C After calling fill: The list is: R R R Max: R Min: R JAVA

6. ALGORITME : binarysearch. Collections.binarySearch(list, key) Zelfde gedrag als bij Arrays Ook overloaded met als derde argument een Comparator. Indien er meerdere gelijke sleutelwaarden zijn is er geen garantie welke sleutel ervan wordt geselecteerd. JAVA

Oefening: Algoritme. Methoden klasse Collections: static int binarySearch(List list, Object key); static int binarySearch(List list, Object key, Comparator c); static void copy(List dest, List src); static Enumeration enumeration(Collection c); static void fill(List list, Object obj); static int indexOfSubList(List source, List target); static int lastIndexOfSubList(List source, List target); static ArrayList list(Enumeration e); static Object max(Collection coll); static Object max(Collection coll, Comparator comp); static Object min(Collection coll); static Object min(Collection coll, Comparator comp); static List nCopies(int n, Object o); static boolean replaceAll(List list, Object oldVal, Object newVal); static void reverse(List list); static Comparator reverseOrder(); static void rotate(List list, int distance); static void shuffle(List list); static void shuffle(List list, Random rnd); static Set singleton(Object o); static List singletonList(Object o); static Map singletonMap(Object key, Object value); static void sort(List list); static void sort(List list, Comparator c); static void swap(List list, int i, int j); static Collection synchronizedCollection(Collection c); //ook voor List, Map, Set, SortedMap, SortedSet static Collection unmodifiableCollection(Collection c); //ook voor List, Map, Set, SortedMap, SortedSet JAVA

Oefening: Algoritme. Gebruik de ArrayList list van fruit van vorige oef... Sorteer de fruit list oplopend. Voeg een nieuw fruit sapodilla toe aan de lijst. Gebruik hiervoor de methode addOrdered die je toevoegt in je eigen klasse CollectionOperaties. JAVA

Oplossing: Algoritme. Collections.sort(list); CollectionOperaties.addOrdered(list, "sapodilla"); //... public static boolean addOrdered(List li, Object key) { boolean changed = false; int index = Collections.binarySearch(li, key); if (index <0) { li.add(index*-1-1, key); changed = true; } return changed; JAVA

HashSet is een implementatie-klasse van interface Set. 7. SET INTERFACE. Interface Collection Interface Set Interface SortedSet HashSet is een implementatie-klasse van interface Set. TreeSet is een implementatie-klasse van interface SortedSet. JAVA

Collectie die unieke elementen bevat. HashSet 7. SET INTERFACE. Collectie die unieke elementen bevat. HashSet Implementatie op basis van hashtabel. TreeSet Implementatie op basis van een boomstructuur. Implementeert SortedSet: subinterface van Set. JAVA

7. SET : HashSet. // Voorbeeld: gebruik HashSet om dubbels te verwijderen. import java.util.*; public class SetTest { private static final String colors[] = {"red","white","blue", "green", "gray", "orange", "tan", "white", "cyan", "peach", "gray", "orange" }; public SetTest() List list = new ArrayList( Arrays.asList( colors ) ); System.out.println( "ArrayList: " + list ); printNonDuplicates( list ); } JAVA

7. SET : HashSet. private void printNonDuplicates( Collection collection ) { Set set = new HashSet( collection ); Iterator iterator = set.iterator(); System.out.println( "\nNonduplicates are: " ); while ( iterator.hasNext() ) System.out.print( iterator.next() + " " ); System.out.println(); } JAVA

7. SET : HashSet. public static void main( String args[] ) { new SetTest(); } ArrayList: [red, white, blue, green, gray, orange, tan, white, cyan, peach, gray, orange] Nonduplicates are: red cyan white tan gray green orange blue peach JAVA

7. SET : TreeSet. import java.util.*; // Gebruik TreeSet om een array te sorteren en dubbels te // elimineren. // Illustreert ‘range view’ methoden: selectie van een // deel van de Collection public class SortedSetTest { private static final String names[] = { "yellow","green","black","tan","grey", "white","orange","red","green" }; JAVA

7. SET : TreeSet. public SortedSetTest() { //array names = { "yellow","green","black","tan", // "grey","white","orange","red","green" }; SortedSet tree = new TreeSet( Arrays.asList( names ) ); System.out.println( "set: " ); printSet( tree ); yellow green black tan grey white orange red JAVA

7. SET : TreeSet. // alle elementen die < zijn dan element "orange" System.out.print( "\nheadSet (\"orange\"): " ); printSet( tree.headSet( "orange" ) ); // alle elementen die >= zijn dan element "orange" System.out.print( "tailSet (\"orange\"): " ); printSet( tree.tailSet( "orange" ) ); // het eerste en het laatste element System.out.println( "first: " + tree.first() ); System.out.println( "last : " + tree.last() ); } JAVA

7. SET : TreeSet. private void printSet( SortedSet set ) { Iterator iterator = set.iterator(); while ( iterator.hasNext() ) System.out.print( iterator.next() + " " ); System.out.println(); } public static void main( String args[] ) { new SortedSetTest(); set: black green grey orange red tan white yellow headSet ("orange"): black green grey tailSet ("orange"): orange red tan white yellow first: black last : yellow JAVA

HashMap en Hashtable zijn implementatie-klassen van Map. 8. MAP INTERFACE. Interface Map Interface SortedMap HashMap en Hashtable zijn implementatie-klassen van Map. TreeMap is een implementatie-klasse van SortedMap. De klasse Properties is een subklasse van Hashtable. JAVA

8. KLASSE HashMap : inleiding Klasse java.util.HashMap Een hash-map wijst sleutels toe aan waarden. De waarden en sleutels kunnen gelijk welk Java-object zijn. Vb.: hashMap "Werknemers"   sleutel waarde 123 566 411 KETERS SANDRA 899 455 178 WAERLOP JURGEN … JAVA

8. KLASSE HashMap : methode get Aan de hand van een sleutel kunnen we de overeenkomstige waarde ophalen  Object get(Object sleutel)  Geeft de overeenkomstige waarde terug of geeft null terug indien de sleutel niet in de hash-tabel voorkomt. Zowel de sleutel als de value kunnen null zijn. JAVA

8. KLASSE HashMap : hashing Een hash-tabel is een gegevensstructuur die gebruik maakt van hashing: De sleutel wordt omgezet naar een array index. Met deze index wordt de waarde opgezocht.  Deze basistechniek heet hashing. Indien twee verschillende sleutels dezelfde array index opleveren dan spreekt men van een collision. JAVA

8. KLASSE HashMap : hash bucket Om collisions te voorkomen maakt JAVA gebruik van "hash bucket (= emmer)": De hash-map bestaat uit cellen. Elke cel is een "hash bucket". Een koppel sleutel-waarde wordt toegekend aan een bepaalde "bucket". De techniek hashing bepaalt in welke bucket het koppel sleutel-waarde terechtkomt. JAVA

8. KLASSE HashMap : methode put We kunnen een koppel sleutel-waarde in de hash-map zetten door de methode put  Object put(Object sleutel, Object waarde)  Geeft de voorgaande waarde terug of geeft null terug indien de sleutel nog niet in de hash-tabel voorkwam. Werpt een NullPointerException indien de sleutel of de waarde gelijk is aan null. JAVA

8. KLASSE HashMap : capaciteit en laadfactor Hash-mappen hebben een capaciteit en een laadfactor. De capaciteit is het aantal emmers ("buckets") dat de hash-map bevat. De laadfactor is een getal tussen 0 en 1. Deze vertelt ons hoe vol een hash-map kan worden voordat de capaciteit wordt verhoogd. Als we de laadfactor niet opgeven wanneer we een hash-map creëren, wordt deze ingesteld op 0.75. Dit betekent dat als het aantal vermeldingen 75% van de capaciteit bereikt, de capaciteit wordt verhoogd met de methode rehash(). JAVA

8. KLASSE HashMap: constructoren Er zijn meerdere constructoren voor de klasse HashMap: hashMap1 = new HashMap() Creëert een lege hash-tabel met een capaciteit van 16 en een laadfactor 0.75. hashMap2 = new HashMap(capaciteit) Creëert een lege hash-tabel met een capaciteit aangegeven door de integer “capaciteit“ en een laadfactor 0.75. HashMap3 = new HashMap(capaciteit, laadfactor) Creëert een lege hash-tabel met een capaciteit aangegeven door de integer “capaciteit“ en een laadfactor aangegeven door de float “laadfactor“. HashMap4 = new HashMap(hashMap1) Creëert hash-tabel met dezelfde mapping als hashMap1 JAVA

8. KLASSE HashMap: VOORBEELD Van een ingegeven zin wordt er afgebeeld hoeveel keer een bepaald woord erin voorkomt. De sleutels zijn de woorden. De overeenkomstige waarden zijn gehele getallen. Deze getallen stellen het aantal keer, dat een woord in de zin voorkomt, voor. JAVA

8. KLASSE HashMap: VOORBEELD JAVA

8. KLASSE HashMap: WordTypeCount import java.util.*; … public class WordTypeCount extends JFrame { private HashMap map; public WordTypeCount() map = new HashMap(); Een lege hashMap creëren. JAVA

8. KLASSE HashMap: WordTypeCount goButton = new JButton( "Go" ); goButton.addActionListener( new ActionListener() { // anonieme innerklasse public void actionPerformed( ActionEvent event ) { createMap(); display.setText( createOutput() ); } } // einde anonieme innerklasse ); // einde oproep naar addActionListener … }// einde constructor Indien de gebruiker op de button "Go" klikt, dan zullen de methodes createMap en createOutput opgeroepen worden. JAVA

8. KLASSE HashMap: WordTypeCount // Illustreert het gebruik van een HashMap: // Telt het voorkomen van elk woord uit een tekst // (JTextField) en bergt de frequentie tabel op in een // String // creëer een map en vul met de woorden private void createMap() { String input = inputField.getText(); StringTokenizer tokenizer = new StringTokenizer( input ); while ( tokenizer.hasMoreTokens() ) String word = tokenizer.nextToken().toLowerCase(); if ( map.containsKey( word ) ) // als de map het woord bevat Integer count = (Integer) map.get( word ); // get value en map.put(word,new Integer(count.intValue()+1));// verhoog } else // anders voeg nieuw woord toe in map met een value 1 map.put( word, new Integer( 1 ) ); Uitleg: zie volgende slide JAVA

8. KLASSE HashMap: WordTypeCount if (map.containsKey( word ) ) { // overeenkomstige waarde opvragen en met één verhogen: Integer count = (Integer) map.get( word ); map.put( word, new Integer( count.intValue() + 1 ) ); } else // de sleutel "word" en waarde 1 in de hash-map zetten map.put( word, new Integer( 1 ) ); Indien het woord "word" (= sleutel) reeds in de hash-map voorkomt, dan wordt zijn overeenkomstige waarde (count) met één verhoogd en terug in de hash-map geplaatst. Anders wordt het woord "word" (=sleutel) en de waarde 1 in de hash-map geplaatst. De methode intValue zet de waarde van de Integer om naar een int. JAVA

8. KLASSE HashMap: WordTypeCount // creëer een string die al de sleutel-waarden koppels van // de map bevat private String createOutput() { StringBuffer output = new StringBuffer( "" ); Iterator keys = map.keySet().iterator(); while ( keys.hasNext() ) // doorloop al de sleutels Object currentKey = keys.next(); output.append( currentKey +"\t"+ map.get(currentKey) + "\n" ); } output.append( "size: " + map.size() + "\n" ); output.append( "isEmpty: " + map.isEmpty() + "\n" ); return output.toString(); JAVA

Implementaties van interface Map 8. MAP INTERFACE. Verzameling van key-value paren. Bij elke sleutel hoort precies één waarde. Implementaties van interface Map HashMap Elementen opgeslagen in hash-tabel. Hashtable Zoals HashMap maar verouderde versie. Werpt een NullPointerException indien de sleutel of value null is. TreeMap Elementen opgeslagen in boomstructuur. Implementatie van SortedMap subinterface van Map. Gebruik de natuurlijke volgorde of een Comparator. JAVA

8. Klasse Hashtable – klasse HashMap De klasse Hashtable is een verouderde klasse en wordt vervangen door de nieuwe klasse HashMap. Klasse HashMap bevat bijna dezelfde methodes als de klasse Hashtable. Een groot verschil is dat HashMap niet gesynchroniseerd is en een Hashtable wel. -> Volgende slide: hetzelfde voorbeeld "WordTypeCount”, door middel van Hashtable table = new Hashtable(); JAVA

8. KLASSE Hashtable: WordTypeCount // hash-tabel opvullen met invoer van de gebruiker private void createTable() { String input = inputField.getText(); StringTokenizer words = new StringTokenizer( input, " \n\t\r" ); while ( words.hasMoreTokens() ) String word = words.nextToken().toLowerCase(); // indien de sleutel "word" reeds in de hashtable "table" voorkomt. if ( table.containsKey( word ) ) // overeenkomstige waarde opvragen en met één verhogen: Integer count = (Integer) table.get( word ); table.put( word, new Integer( count.intValue() + 1 ) ); } else // de sleutel "word" en waarde 1 in de hash-tabel zetten table.put( word, new Integer( 1 ) ); } // einde while } // einde methode createTable JAVA

8. KLASSE Hashtable: WordTypeCount // string creëren die alle sleutels en overeenkomstige waarden // van de hash-tabel bevat private String createOutput() { String output = ""; Enumeration keys = table.keys(); // de sleutels doorlopen while ( keys.hasMoreElements() ) Object currentKey = keys.nextElement(); // het koppel sleutel-waarde toevoegen aan de string output += currentKey + "\t" + table.get( currentKey ) + "\n"; } output += "size: " + table.size() + "\n"; output += "isEmpty: " + table.isEmpty() + "\n"; return output; } // einde methode createOutput Geeft een enumeration terug zodat we de hash-table kunnen doorlopen. De enumeration bevat alle sleutels. Geeft het aantal koppels sleutels-waarden, die de hash-tabel bevat, terug JAVA

8. KLASSE Hashtable: WordTypeCount JAVA

H21. KLASSE Properties : inleiding Klasse java.util.Properties Een properties-tabel is een hash-tabel waarbij de sleutels en waarden altijd String zijn. De klasse Properties is een subklasse van Hashtable. Doel van Properties: deze klasse biedt een eenvoudige manier om op de property koppels (=tekst gebaseerde gegevens) als bestand op schijf te bewaren en terug op te laden. WORDT LATER UITGELEGD JAVA

Oefening: Set en Map. Methode interface Map: void clear(); boolean containsKey(Object key); boolean containsValue(Object value); Set entrySet() ; boolean equals(Object o); Object get(Object key); int hashCode(); boolean isEmpty(); Set keySet(); Object put(Object key, Object value); void putAll(Map t); Object remove(Object key); int size(); Collection values(); Methoden interface Map.Entry: Boolean equals(Object o); Object getKey(); Object getValue(); int hashCode(); Object setValue(); JAVA

Oefening: Set en Map. Berg de fruit list van vorige oefeningen in een boom op zodat dubbels geëlimineerd worden. Er moet ook de mogelijkheid zijn de bijhorende prijs (decimale waarde) bij te houden. Doorloop de boom in lexicaal oplopende volgorde en vraag telkens de bijhorende prijs, die je mee in de boom opbergt. Druk vervolgens de volledige lijst in twee kolommen (naam : prijs) in lexicaal oplopende volgorde af op het scherm. JAVA

Oplossing: Set en Map. TreeMap fruit = new TreeMap(); Iterator it = list.iterator(); while ( it.hasNext() ) fruit.put(it.next(), null); it = fruit.keySet().iterator(); { String name = (String) it.next(); double prijs = Double.parseDouble(JOptionPane.showInputDialog(null, "Prijs van " + name)); fruit.put(name, new Double(prijs) ); } it = fruit.entrySet().iterator(); { Map.Entry me = (Map.Entry) it.next(); System.out.println(me.getKey() + "\t" + me.getValue());} JAVA

9. SYNCHRONIZATION WRAPPERS. De collections van het Collections framework zijn unsynchronized. Via synchronization wrapper klasse converteren we collections tot synchronized versies. public static Collections methoden: Collection synchronizedCollection (Collection c) List synchronizedList( List aList) Set synchronizedSet(Set s) SortedSet synchronizedSortedSet(SortedSet s) Map synchronizedMap(Map m) SortedMap synchronizedSortedMap(SortedMap m) Vb: List list = Collections.synchronizedList(new ArrayList() );

10. UNMODIFIABLE WRAPPERS. Convertie naar niet wijzigbare collections. Throw UnsupportedOperationException bij poging tot wijzigen van collectie. public static Collections methoden: Collection unmodifiableCollection (Collection c) List unmodifiableList( List aList) Set unmodifiableSet(Set s) SortedSet unmodifiableSortedSet(SortedSet s) Map unmodifiableMap(Map m) SortedMap unmodifiableSortedMap(SortedMap m) JAVA

11. ABSTRACT IMPLEMENTATIONS. Er zijn abstracte implementaties van de collection interfaces die als basis voor een zelfgedefiniëerde implementatie kunnen dienen. AbstractCollection AbstractList AbstractMap AbstractSequentialList AbstractSet JAVA

OVERZICHT NEE JA JA NEE JA NEE NEE NEE JA JA