Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.

Lignende præsentationer


Præsentationer af emnet: "DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep."— Præsentationens transcript:

1 DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep

2 DAIMIIntroducerende Objektorienteret Programmering2 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)  ”A collection is an object that represents a group of objects”

3 DAIMIIntroducerende Objektorienteret Programmering3 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 DAIMIIntroducerende Objektorienteret Programmering4 Collections i Java (1.)2  Java 2 har udvidet antallet og funktionaliteten af collections voldsomt, bl.a. kan de håndtere ordnede mængder (dersom de indeholdte objekter implementerer Comparable interfacet – og det gør alle klasser i Java, specielt String). 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 DAIMIIntroducerende Objektorienteret Programmering5 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 DAIMIIntroducerende Objektorienteret Programmering6 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 (eng: map), hvilket er Java 1.2 navnet: Map

7 DAIMIIntroducerende Objektorienteret Programmering7 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 DAIMIIntroducerende Objektorienteret Programmering8 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 DAIMIIntroducerende Objektorienteret Programmering9 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 DAIMIIntroducerende Objektorienteret Programmering10 Sweep  Hvad nu hvis vi vil gennemløbe alle par i ordbogen?  int i = 0;  while ( i != d.size() ) {  d.get( hvad????);  i++;  }  En ordbog er ikke indekseret, derfor er der heller ikke nogen naturlig sweep-variabel...

11 DAIMIIntroducerende Objektorienteret Programmering11 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 DAIMIIntroducerende Objektorienteret Programmering12 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 DAIMIIntroducerende Objektorienteret Programmering13 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 DAIMIIntroducerende Objektorienteret Programmering14 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 DAIMIIntroducerende Objektorienteret Programmering15 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 DAIMIIntroducerende Objektorienteret Programmering16 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 DAIMIIntroducerende Objektorienteret Programmering17 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 DAIMIIntroducerende Objektorienteret Programmering18 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 DAIMIIntroducerende Objektorienteret Programmering19 Mere information Konsulter JavaDoc for java.util biblioteket Og kig på eksemplerne i Java projekterne til denne lektion.


Download ppt "DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep."

Lignende præsentationer


Annoncer fra Google