Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afAlma Kvist Redigeret for ca. et år siden
1
Collections og opremsning Nye typer collections, objektorienteret sweep
2
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.2 Collections Vi har set nogle få eksempler på klasser, hvis formål er at opbevare andre objekter Sequence(ordnet, kan opbevare heltal) Vector(ordnet, vilkårlige objekter) Bag(uordnet, vilkårlige objekter) ”A collection is an object that represents a group of objects”
3
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.3 Collections i Java 1.1 Der findes et række forskellige typer collections med forskellige karakteristika og effektivitet: Lister, køer, deques, mængde, hashtabeller, ordbog… Java 1.1 bibliotekerne har en del af disse: java.util.Stack; java.util.Dictionary; java.util.Hashtable;
4
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.4 Collections i Java (1.)2 Java 2 har udvidet antallet og funktionaliteten af collections voldsomt, bl.a. kan de håndtere ordnede mængder. Men... Det er også blevet temmelig kompliceret... Derfor – vil vi holde os til Java 1.1’s klasser, som stadig findes i Java (1.)2
5
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.5 Stack En stack er en collection, hvor du kun kan udtage og indsætte elementer fra ’toppen’, ligesom i et spil kort. Som ved Vector er den referencebaseret. Vector Stack Stack s = new Stack(); s.push( "Første" ); s.push( "Anden" ); s.push( "Tredje" ); s.push( "Fjerde" ); s.push( "Femte" ); for ( int i = 0; i < 5; i++ ) { System.out.println( s.pop() ); }
6
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.6 Dictionary Dictionary er en “ordbogs-collection”. Den gemmer et objekt (element) som indekseres ved hjælp af en nøgle (key). Disse danner dermed et (key,element) par. Eks: ( “Lecture”, “Forelæsning” ) ( “Student”, “Elev” ) ( “Class”, “Klasse” ) Denne type collection hedder ofte også en afbildning (map), hvilket er Java 1.2 navnet: Map
7
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.7 Dictionary Både key og element kan være objekter af vilkårlige klassebaserede typer som implementere metoden equals. Metoder: Object put(Object key, Object element) Indsætter (key,element) parret i collectionen, returnerer null, hvis et element med identisk key ikke allerede findes i collectionen, ellers returneres det gamle element. Object get(Object key) Return element med givne key, ellers null
8
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.8 Dictionary Dictionary er en abstrakt klasse, dvs. der skal en nedarvet klasse til at udfylde den konkrete implementation. Java tilbyder en sådan, nemlig Hashtable. Vi vil ikke gå i detaljer med denne type collection, blot vise brugen.
9
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.9 Dictionary eksempel Dictionary d = new Hashtable(); // Indsæt en række ord i vores ordbog d.put( "Java", "A hype programming language" ); d.put( "C++", "Industrial standard OO language - a better C" ); d.put( "Pascal", "Successful research language - good for teaching" ); d.put( "Basic", "Once king of personal microcomputers" ); d.put( "Fortran", "Oldest programming language, still widely used" ); d.put( "LISP", "Interpreted list processing language" ); // Opslag i ordbogen: System.out.println( "Opslag på Basic: "+d.get("Basic") ); System.out.println( "Opslag på C++: "+d.get("C++") ); System.out.println( "Opslag på C: "+d.get("C") );
10
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.10 Sweep Hvad nu hvis vi vil gennemløbe alle par i ordbogen? for ( int i = 0; i < d.size(); i++ ) { d.get( hvad????); } En ordbog er ikke indekseret, derfor er der heller ikke nogen naturlig sweep-variabel...
11
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.11 Sweep analyse Analyse af et sweep:... i 0b.size() i = 0;... while ( i != b.size() ) { // behandl b.elementAt(i) i++; } // i == b.size() b: i er et index (altså en reference) til elementet under inspektion
12
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.12 Objektorienteret sweep startenslutningen i = starten ;... while ( ! i nået til slutningen ) { // behandl element udpeget af i lad i referere til næste element ; } // i == b.size() b: reference til inspicerede element i:
13
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.13 Opremsning Java’s “util” bibliotek indeholder en sådan objektorienteret opremser, en enumerator. (import java.util.Enumeration) En enumeration har to vigtige metoder: boolean hasMoreElements() true, hvis der er flere elementer tilbage at opremse Object nextElement() returnerer næste element fra collectionen
14
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.14 Enumeration objekt Javas collections indeholder en metode, der returnerer et enumerator objekt, denne hedder oftest: Enumeration elements(); returnerer en enumerator for denne collection og sætter denne til at pege på første element. (Dictionary har to: keys() og values())
15
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.15 Eksempel: Vector & Dictionary Enumeration e; Vector v = setupVector(); System.out.println ( "--- Vector opremsning ---" ); e = v.elements(); while ( e.hasMoreElements() ) { String s = (String) e.nextElement(); System.out.println( ">>>> " + s ); } Dictionary d = setupDictionary(); System.out.println ( "--- Dictionary opremsning ---" ); e = d.keys(); while ( e.hasMoreElements() ) { String s = (String) e.nextElement(); System.out.println( ">>>> " + s+ ","+d.get(s) ); } Pointen er her: Koden er stort set identisk trods det er vidt forskellige collections, der opremses i.
16
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.16 Opremsning af “tokens” En ofte forekommende problemstilling er at dele en streng op i logiske “bidder”, f.eks. at dele et afsnit op i sætninger, sætninger op i ord, osv. Java har en klasse, der kan dele og opremse en streng: StringTokenizer. StringTokenizer t = new StringTokenizer("Dette er en tekst."," "); while ( t.hasMoreTokens() ) { System.out.print( t.nextToken() + "-" ); } Resultat: Dette-er-en-tekst.
17
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.17 Java 1.2 – alligevel Java 1.1’s collections baserede sig på konkrete klasser. Java 1.2’s er baseret på interfaces og en række konkrete implementationer. Det interessante (som brugere) er interfaces: Vectormodsvares af List interfacet Dictionarymodsvares af Map interfacet Enumerationmodsvares af Iterator interfacet Setrepræsenterer en mængde (ej i Java 1.1)
18
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.18 Algoritmer List collections (f.eks. Vector) tilbyder nogle gode algoritmer: sort(List) - Sorts a list using a merge sort algorithm, which provides average-case performance comparable to a high-quality quicksort, guaranteed O(n*log n) performance (unlike quicksort), and stability (unlike quicksort). (A stable sort is one that does not reorder equal elements.) sort(List) binarySearch(List, Object) - Searches for an element in an ordered list using the binary search algorithm. binarySearch(List, Object) reverse(List) - Reverses the order of the elements in the a list. reverse(List) shuffle(List) - Randomly permutes the elements in a list. shuffle(List) o.a. Sortering kræver naturligvis en naturlig ordning af elementerne. Dette kan elementerne angive ved at implementere interfacet Comparable: public int compareTo(Object o)Object
19
Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.19 Mere information En oversigt over de nye collections kan du finde på: C:\ioop\jdk\docs\guide\collections\overview.html C:\ioop\jdk\docs\guide\collections\reference.html Se endvidere programmet ”J12Collections.java” i ugesedlens zip som viser nogle eksempler...
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.