PowerPoint-presentatie

January 8, 2018 | Author: Anonymous | Category: Engineering & Technology, Informatica, Java Programming
Share Embed Donate


Short Description

Download PowerPoint-presentatie...

Description

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= 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.(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 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

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF