Title: H21.%20en%20H22.%20COLLECTIONS%20FRAMEWORK.%20%20%201.
1 H21. en H22. COLLECTIONS FRAMEWORK.
1. INLEIDING.
- Collections framework
- Meest voorkomende datastructuren
gestandaardiseerd en efficient geïmplementeerd. - Goed voorbeeld van herbruikbare code
22. 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
32. OVERZICHT COLLECTIONS FRAMEWORK
- Interface Collection
- Interface List Interface Set
- Interface Map
-
43. 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
53. 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 7s
- Arrays.fill( filledInt, 7 )
- // sorteer doubleValues in oplopende volgorde
- Arrays.sort( doubleValues )
- // copy array intValues naar array intValuesCopy
- System.arraycopy( intValues, 0,
intValuesCopy,
63. 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.
7 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
//... //...
83. 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)
93. 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 gt toIndex
- ArrayIndexOutOfBoundsException
- if fromIndex lt 0 of toIndex gt a.length
- Idem voor char, byte, short, long, float, double
en object
103. CLASS ARRAYS overloaded methoden
- static void sort(int a)
- static void sort(int a, int fromIndex,
int toIndex) - IllegalArgumentException if fromIndex gt toIndex
- ArrayIndexOutOfBoundsException
- if fromIndex lt 0 of toIndex gt 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.
113. 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
123. CLASS ARRAYS static methode asList
// output via List en via array public void
printElements() System.out.print(
"List elements " ) for ( int count 0
count lt list.size() count )
System.out.print( list.get( count ) " " )
System.out.print( "\nArray elements " )
for ( int count 0 count lt 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
134. 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
144 BIS. INTERFACE ITERATOR EN LISTITERATOR.
- Interface Iterator
- 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
155. LIST INTERFACE.
- Interface Collection
- Interface List
- ArrayList, LinkedList en Vector zijn
implementatie klassen van interface List. - De klasse Stack is een subklasse van Vector.
16 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!
175. 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)
185. 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 lt colors.length count )
list.add( colors count ) // van string
objecten list.add( Color.CYAN )
// van color object
195. Voorbeeld ARRAYLIST
// afdrukken System.out.println(
"\nArrayList " ) for ( int count 0
count lt 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 lt list.size()
count ) System.out.print( list.get(
count ) " " )
205. 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.Colorr255,g0,b255 red
white blue java.awt.Color r0,g255,b255 Arra
yList after calling removeStrings java.awt.Color
r255,g0,b255 java.awt.Colorr0,g255,b255
21Oefening 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
22 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).
23Oplossing 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)
245. 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 lt colors.length
count ) link.add( colors count )
link2.add( colors2 count )
255. Voorbeeld LINKEDLIST 1
// plak link2 achter link link.addAll(
link2 ) // concatenatie van lists
link2 null // 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
265. Voorbeeld LINKEDLIST 1
public void printList( List list )
for ( int count 0 count lt list.size()
count ) System.out.print( list.get(
count ) " " ) public void printList(
Collection collection ) Iterator
iterator collection.iterator() while (
iterator.hasNext() ) System.out.println(it
erator.next())
275. 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() )
285. 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
295. 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
305. 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
315. Voorbeeld LINKEDLIST 2
// get LinkedList elements als een array
colors(String ) links.toArray(new String
links.size() ) // ... Levert volgende
lijstcyan, 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 asize wordt null.
32Oefening 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()
33Oefening 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
34Oplossing List Implementaties.
//... ArrayList list new ArrayList() for(int i
0 ilt kist.length i)
list.addAll(Arrays.asList(kisti)) CollectionOp
eraties.verwijderOpLetter(list,
'p') CollectionOperaties.verwijderSequence(list,
"kiwi") String mand (String)
list.toArray(new Stringlist.size()) Arrays.sor
t(mand) //...
35Oplossing 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 ( (oit.next())
instanceof String ((String) o).charAt(0)lette
r ) it.remove()
changedtrue return
changed
36Oplossing 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, last1).clear()
changedtrue return changed
37H21 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.
38 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
- 0 1 2
... 9 - try
- vector.add( 1, "green" ) //op index 1
wordt - // "green"
toegevoegd - catch (ArrayIndexOutOfBoundsException exception)
- exception.printStackTrace()
-
- magenta green cyan
- 0 1 2 3 ...
9
39 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 lt 0 of index
gt size() - catch (ArrayIndexOutOfBoundsException exception)
- exception.printStackTrace()
-
40 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 indexlt0 of index
gt 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
41 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()
42 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" )
43 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 lt 0 of index
gt size() - catch (ArrayIndexOutOfBoundsException exception)
-
- exception.printStackTrace()
-
- vector.removeAllElements()
-
44 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.eleme
nts() -
- 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. -
45H 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".
46H 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.
47 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.
48 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.
49H 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".
50 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.
51 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.
52 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.
53 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.
54 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.
55 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 34567 popped stack contains true
popped stack contains true true popped stack
is empty java.util.EmptyStackException
at java.util.Stack.peek(Stack.java79) at
java.util.Stack.pop(Stack.java61) at
StackTest.ltinitgt(StackTest.java32) at
StackTest.main(StackTest.java63)
hello 34567 true
56Oefening Stack en LinkedList.
- Herschrijf je eigen klasse Stack, door gebruik
te maken van LinkedList. - Methode push
- Methode pop
- Methode empty
- Methode peek
- Methode search
57Oplossing 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)
-
58Oplossing 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()
-
59Oplossing 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
-
606. 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
616. 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.
626. 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 ...
636. 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() )
// output List elements System.out.println(
"Sorted list elements\n" list )
public static void main( String args ) new
Sort3().printElements()
646. ALGORITME sort zelfgedefinieerde
Comparator.
private class TimeComparator implements
Comparator int hourCompare,
minuteCompare, secondCompare Time2 time1,
time2 // gt0 ? object1gtobject2 lt0 ?
object1ltobject2 0 ? obj.1obj.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()).co
mpareTo( new Integer(
time2.getSecond() ) ) return
secondCompare // tenslotte de seconden
656. ALGORITME shuffle.
Unsorted array elements 062434, 181405,
080500, 120758, 061422 Sorted list
elements 061422, 062434, 080500,
120758, 181405
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
666. 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 lt deck.length count )
deck count new Card( faces count 13 ,
suits count / 13 ) list
Arrays.asList( deck ) Collections.shuffle(
list ) //...
676. 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)
686. 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() gt list.size() //
overige (laatste) elementen blijven ongewijzigd
//als er copyList.size() lt list.size() //
IndexOutOfBoundsException
System.out.println( "\nAfter copying " )
output(copyList) Collections.fill( list,
"R" ) // fill list with Rs
System.out.println( "\nAfter calling fill " )
output(list)
696. ALGORITME reverse, fill, copy, min, max.
private void output( List listRef )
System.out.print( "The list is " ) for (
int k 0 k lt 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 Max P Min C
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
706. 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.
71Oefening 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
72Oefening 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.
73Oplossing Algoritme.
Collections.sort(list) CollectionOperaties.addOrd
ered(list, "sapodilla") //... public static
boolean addOrdered(List li, Object key)
boolean changed false int index
Collections.binarySearch(li, key) if (index
lt0) li.add(index-1-1, key)
changed true return changed
747. SET INTERFACE.
- Interface Collection
-
- Interface Set
- Interface SortedSet
- HashSet is een implementatie-klasse van
interface Set. - TreeSet is een implementatie-klasse van
interface SortedSet.
757. 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.
767. 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 )
777. 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()
787. 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
797. 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"
807. 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
817. SET TreeSet.
// alle elementen die lt zijn dan element
"orange" System.out.print( "\nheadSet
(\"orange\") " ) printSet( tree.headSet(
"orange" ) ) // alle elementen die gt 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() )
827. 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
838. 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.
84 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 -
85 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.
-
86 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. -
87 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.
88 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. -
89 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().
908. 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
91 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.
92 8. KLASSE HashMap VOORBEELD
93 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.
94 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.
958. 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
96 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.
978. 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()
988. 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.
998. 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. - -gt Volgende slide hetzelfde voorbeeld
"WordTypeCount, door middel van Hashtable - table new Hashtable()
100 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().toLowe
rCase() // 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
101 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
1028. KLASSE Hashtable WordTypeCount
103 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
104Oefening 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()
105Oefening 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.
106Oplossing 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(nul
l, "Prijs van " name))
fruit.put(name, new Double(prijs) ) it
fruit.entrySet().iterator() while (
it.hasNext() ) Map.Entry me (Map.Entry)
it.next() System.out.println(me.getKey()
"\t" me.getValue())
1079. 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() )
10810. 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)
10911. 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
110 OVERZICHT
NEE
JA
NEE
JA
NEE
JA
NEE
NEE
JA
JA