PowerPoint-presentatie

advertisement
H21. en H22. COLLECTIONS FRAMEWORK.
1. INLEIDING.

Collections framework


Meest voorkomende datastructuren
gestandaardiseerd en efficient
geïmplementeerd.
Goed voorbeeld van herbruikbare code
JAVA
1
2. OVERZICHT COLLECTIONS FRAMEWORK

Collection


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




Collection
Set
List
Map
JAVA
2
2. OVERZICHT COLLECTIONS FRAMEWORK
Interface Collection
Interface List
Interface Set
Interface Map
JAVA
3
3. CLASS ARRAYS

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
4
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
}
5
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
6
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
7
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
8
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
9
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
10
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
11
}
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
12
4. INTERFACE COLLECTION EN KLASSE
COLLECTIONS.

Interface Collection

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
13
4 BIS. INTERFACE ITERATOR EN LISTITERATOR.

Interface Iterator




boolean hasNext()
Object next()
void remove()
//optional
Interface ListIterator extends Iterator





void add(Object o)
boolean hasPrevious()
int nextIndex()
Object previousIndex()
void set(Object o)
JAVA
//optional
//optional
14
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
15
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
16
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
17
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 );
//
JAVA
van color object
18
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: " );
for ( int count = 0; count < list.size(); count++ )
System.out.print( list.get( count ) + " " );
}
JAVA
19
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
20
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
21
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
22
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 = new ArrayList(x);
res.retainAll(y);
System.out.println("x en y hebben gemeenschappelijk "+ res);
JAVA
23
5. Voorbeeld : LINKEDLIST 1
import java.util.*;
public class ListTest
{
private static final
"green", "blue",
private static final
"brown", "blue",
String colors[] = { "black", "yellow",
"violet", "silver" };
String colors2[] = { "gold", "white",
"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
}
24
5. Voorbeeld : LINKEDLIST 1
// ‘plak’ link2 achter link
link.addAll( link2 );
link2 = null;
// concatenatie van lists
// release resources
printList( link );
uppercaseStrings( link );
printList( link );
System.out.print( "\nDeleting elements 4 to 6..." );
removeItems( link, 4, 7 );
printList( link );
printReversedList( link );
} // einde constructor ListTest
JAVA
25
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
26
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
27
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
28
5. Voorbeeld : LINKEDLIST 1
list:
black yellow green blue violet silver gold white brown blue gray silver
list:
BLACK YELLOW GREEN BLUE VIOLET SILVER GOLD WHITE BROWN BLUE GRAY SILVER
Deleting elements 4 to 6...
list:
BLACK YELLOW GREEN BLUE WHITE BROWN BLUE GRAY SILVER
Reversed List:
SILVER GRAY BLUE BROWN WHITE BLUE GREEN YELLOW BLACK
JAVA
29
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
30
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
31
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
32
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
33
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
34
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
35
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
36
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
37
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
0
cyan
1
2
...
9
try
{
vector.add( 1, "green" ); } //op index 1 wordt
// "green" toegevoegd
catch (ArrayIndexOutOfBoundsException exception)
{ exception.printStackTrace(); }
magenta
0
green
1
JAVA
cyan
2
3
...
938
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
39
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
40
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 )
JAVA
41
{ exception.printStackTrace();
}
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
42
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
43
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
44
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
45
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
46
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
47
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
48
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
49
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
50
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
51
H 21.
KLASSE StackTest
import java.util.*;
public class StackTest
{
public StackTest()
{
Stack stack = new Stack();
Een lege Stack
wordt gecreëerd.
// objecten creëren om in de stack te plaatsen
Boolean bool = Boolean.TRUE;
Character character = new Character( '$' );
Integer integer = new Integer( 34567 );
methode
String string = "hello";
push
voegt een Object
op de top van de
Stack toe.
// push methode gebruiken
stack.push( bool ); printStack( stack );
stack.push( character ); printStack( stack );
stack.push( integer ); printStack( stack );
stack.push( string ); printStack( stack );
JAVA
52
H 21.
KLASSE StackTest
// verwijder objecten van de stack
try
{
Object removedObject = null;
methode pop
verwijdert het object
dat op de top van de
Stack staat.
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
JAVA
53
H 21.
KLASSE StackTest Stack erft van
private void printStack( Stack stack )
Vector, dus de
{
klasse Stack kan ook
if ( stack.empty() )
de methode
System.out.print( "stack is empty" ); elements
else
gebruiken. Alle
{
objecten van de stack
System.out.print( "stack contains: " );
worden doorlopen
Enumeration items = stack.elements();
door behulp van
// stack doorlopen
Enumeration.
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
JAVA
De top van de
Stack wordt als
laatste weergegeven
op het scherm.
54
H 21.
KLASSE StackTest
stack contains: true
stack contains: true $
stack contains: true $ 34567
stack contains: true $ 34567 hello
hello popped
stack contains: true $ 34567
hello
34567
$
true
34567 popped
stack contains: true $
$ popped
stack contains: true
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)
JAVA
at StackTest.main(StackTest.java:63)
55
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
56
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
57
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
}
58
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
59
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
60
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.
61
6. ALGORITME : sort
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
62
6. ALGORITME : sort : zelfgedefinieerde Comparator.
import java.util.*;
public class Sort3
{
public void printElements()
{
List list = new ArrayList();
list.add( new Time2( 6, 24,
list.add( new Time2( 18, 14,
list.add( new Time2( 12, 07,
list.add( new Time2( 6, 14,
list.add( new Time2( 8, 05,
34
05
58
22
00
)
)
)
)
)
);
);
);
);
);
// output List elements
System.out.println( "Unsorted array elements:\n" + list );
// sort in order using a comparator
Collections.sort( list, new TimeComparator() );
// output List elements
System.out.println( "Sorted list elements:\n" + list );
}
public static void main( String args[] )
{ new Sort3().printElements();
JAVA
}
63
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
64
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
}
65
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
66
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
67
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
68
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 copying:
The list is: M C P
Max: P Min: C
After calling reverse:
The list is: M C P
Max: P Min: C
After calling fill:
The list is: R R R
Max: R Min: R
JAVA
69
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
70
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
71
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
72
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
73
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
74
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
75
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
76
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
77
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
78
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
79
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
80
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
81
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"):
tailSet ("orange"):
first: black
last : yellow
black green grey
orange red tan white yellow
JAVA
82
8. MAP INTERFACE.
Interface Map
Interface SortedMap
HashMap en Hashtable zijn implementatieklassen van Map.
TreeMap is een implementatie-klasse van
SortedMap.
De klasse Properties is een subklasse van
Hashtable.
JAVA
83
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
123 566 411
899 455 178
…
JAVA
waarde
KETERS SANDRA
WAERLOP JURGEN
84
8. KLASSE HashMap : methode get

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
85
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
86
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
87
8. KLASSE HashMap : methode put

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. 88
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
89

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
90
8. KLASSE HashMap: VOORBEELD
 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
91
8. KLASSE HashMap: VOORBEELD
JAVA
92
8. KLASSE HashMap: WordTypeCount
import java.util.*;
…
public class WordTypeCount extends JFrame
{
…
private HashMap map;
public WordTypeCount()
{
…
map = new HashMap();
JAVA
Een lege
hashMap
creëren.
93
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
JAVA
94
worden.
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
}
JAVA
95
volgende slide
}
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
JAVA
96
naar een int.
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
97
8. MAP INTERFACE.


Verzameling van key-value paren. Bij elke
sleutel hoort precies één waarde.
Implementaties van interface Map

HashMap


Hashtable



Elementen opgeslagen in hash-tabel.
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
98
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
99
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
JAVA
100
} // einde methode createTable
8. KLASSE Hashtable: WordTypeCount
// string creëren die alle sleutels en overeenkomstige waarden
// van de hash-tabel bevat
Geeft een enumeration
private String createOutput()
terug zodat we de hash{
table kunnen doorlopen.
String output = "";
De enumeration bevat
Enumeration keys = table.keys();
alle sleutels.
// 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() +
return output;
} // einde methode createOutput JAVA
Geeft het aantal
koppels sleutels"\n";
waarden, die de
hash-tabel bevat,
101
terug
8. KLASSE Hashtable: WordTypeCount
JAVA
102
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
103
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
104
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
105
Oplossing: Set en Map.
TreeMap fruit = new TreeMap();
Iterator it = list.iterator();
while ( it.hasNext() )
fruit.put(it.next(), null);
it = fruit.keySet().iterator();
while ( it.hasNext() )
{ 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();
while ( it.hasNext() )
{ Map.Entry me = (Map.Entry) it.next();
JAVA+ me.getValue());}
System.out.println(me.getKey() + "\t"
106
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() );107
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
108
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
109
OVERZICHT
Er kunnen dubbels voorkomen/
Geen associatieve toegang nodig
NEE
JA
JA
ArrayList
Vooral achteraan
toevoegen / Veel
geïndexeerde
toegang
Is er een
ordeningscriterium?
NEE
LinkedList
JA
NEE
Is enkel de sleutel nodig?
NEE
JA
Is enkel de sleutel nodig?
TreeMap
TreeSet
NEE
JA
HashMap
HashSet
Download