Collection classes. Interface, första exempel. Interface (forts) Men först

Relevanta dokument
Collection Classes. bjectorienterad programmering Sida 1

Samlingar Collection classes

Samlingar Collection classes

Generiska typer. Java 5.0: Säkrare, snyggare, smidigare. Viktigaste utökningarna av språket: Autoboxing/unboxing, bakgrund.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Interfacen Set och Map, hashtabeller

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Länkade strukturer. (del 2)

Diskutera. Hashfunktion

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

DAT043 - föreläsning 8

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 11 Innehåll

Inlämningsuppgift och handledning

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 2 Innehåll

Repetition av OOP- och Javabegrepp

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Generiska programenheter. Generiska programenheter Samlingar

Föreläsning 2. Länkad lista och iterator

Objektorienterad Programkonstruktion

Repetition av OOP- och Javabegrepp

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Länkade strukturer, parametriserade typer och undantag

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Stackar, köer, iteratorer och paket

Föreläsning 2. Länkad lista och iterator

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

OOP Objekt-orienterad programmering

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 2 Innehåll

Föreläsning 9. Generiska programenheter Samlingar

Föreläsning 4 Innehåll

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 2 Datastrukturer (DAT037)

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Tentamen, EDAA30 Programmering i Java fortsättningskurs

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Sammansatta datatyper Generics: Parametrisk polymorfism

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Java, klasser, objekt (Skansholm: Kapitel 2)

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Objektorienterad Programmering (TDDC77)

Föreläsning 12. Generiska programenheter Designmönstret Iterator Samlingar. Generiska programenheter

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Arrayer. results

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

DAT043 Objektorienterad Programmering

Föreläsning 10. Generiska programenheter. Generiska programenheter Samlingar

Föreläsning 8: Exempel och problemlösning

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Programmering för språkteknologer II, HT2014. Rum

Den som bara har en hammare tror att alla problem är spikar

Generiska datatyper. Parametrisk Polymorfism: Generics. Generisk lista. Utvikning: Typer

Föreläsning 14 Innehåll

Generisk klass med typparameter Inre klass - ListIterator

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad programmering med Java, Generics

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Programmering fortsättningskurs

Programmering för språkteknologer II, HT2014. Rum

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Laboration 13, Arrayer och objekt

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

TDDC77 Objektorienterad Programmering

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Objektorienterad programmering i Java

Transkript:

Collection Classes Koppling mellan abstraktioner på hög nivå och praktiska och effektiva implementationer av datastrukturer abstraktionerna: naturliga matematiska begrepp mängder, sekvenser avbildningar (maps/tabeller) Vårt mål: lära lite om CC (mycket användbart) inblick i design av ett avancerat klassbibliotek. Interface, första exempel public interface MyInterface { void amethod(int i); public class MyClass implements MyInterface { public void amethod(int i) {...... Objectorienterad programmering Sida 1 Objectorienterad programmering Sida 3 Interface (forts) Vi säger att en klass implementerar ett interface. Men först Repetition: Student.java, StudentTest.java Gränssnitt (Interface) Parametriska typer En klass kan bara ärva en annan klass men implementera många interface. Man kan använda interface för att hänga på en klass ytterligare egenskaper. En vanlig variabeldeklaration beskriver hur det data som variabeln lagrar ser ut En variabel som deklareras att vara av ett visst interface: varje objekt som variabeln refererar måste implementera gränssnittet Objectorienterad programmering Sida 2 Objectorienterad programmering Sida 4

Generiska typer exempel Exempel på interface i Javas API public class Box<X> { private X x; EventListener Comparable List, Set, Map Iterator public X getx() { return x; public void putx (X x0) { x = x0; Objectorienterad programmering Sida 5 Objectorienterad programmering Sida 7 Samlingar (Collections Framework) relativt nytt: Från Java 2 platform, version 1.2 idé: ett litet antal generella gränssnitt (interface) som beskriver mängder, sekvenser, tabeller Genererisk typ test public static void main (String [] arg) { Box<String> b = new Box<String> (); b.putx("foo"); String s = b.getx(); System.out.println(s); varje samling implementerar ett eller flera gränssnitt Flera utökningar i Java 5 underlättar: generaliserad for-loop, autoboxing/unboxing, generiska typer Box<Integer> c = new Box<Integer> (); c.put(42); int i = c.getx(); System.out.println(i); Objectorienterad programmering Sida 6 Objectorienterad programmering Sida 8

Allmänt om generiska typer Parametrarna lever bara vid kompileringstillfället. I princip kan ett Java 5-program generera samma bytekod som ett Java 1.4.2-program. Jfr templates i C++. Typ-parametrarna används när kompilatorn kontrollerar programmet och sätter in vissa konverteringar (autobox/unboxing). Jia: 8.2, Skansholm: 17 Collection Classes Se även Suns tutorial om Collections Objectorienterad programmering Sida 9 Objectorienterad programmering Sida 11 Motivation: Parametriska metoder class Id { public static <T> T id(t x) { return x; Vill samla olika datastrukturer för att representera tabeller, mängder, sekvenser i ett standardbibliotek. Viktigt att alla datastrukturer kan hanteras på ett likartat sätt, så att det är lätt att lära sig använda biblioteket man kan lätt ändra val av datastruktur lätt att sätta ihop olika programkomponenter som skickar och tar emot datastrukturer i form av samlingar Objectorienterad programmering Sida 10 Objectorienterad programmering Sida 12

Olika slag av samlingar i Java Arrayer (Till exempel: int[]) grundläggande lagrar alla datatyper Vector liknar array men kan expanderas lagrar endast äkta objekt (som definierats i en klass) Collections, ett första exempel Simple.java Simple142.java Samma exempel i gamla Java Objectorienterad programmering Sida 13 Objectorienterad programmering Sida 15 Interface för samlingar Repetition: Interface En slags lättviktsklasser. Beskriver en uppsättning metoder. Man säger att en klass implementerar ett interface. Collection Map Set List SortedMap SortedSet Objectorienterad programmering Sida 14 Objectorienterad programmering Sida 16

Exempel på klasser som implementerar samlingar ArrayList Arrayer. Implementerar List LinkedList Länkade listor. Implementerar List HashMap Hashtabeller. Implementerar Map TreeSet Balanserade binärträd. Implementerar Set, SortedSet Operationer på Collection <E> int size() boolean isempty() boolean contains(object element) boolean remove(object element) boolean add(e element) Iterator<E> iterator() Objectorienterad programmering Sida 17 Objectorienterad programmering Sida 19 Collection Operationer på många element En samling element operationer för att lägga till och ta bort element Konvention: Varje klass K som implementerar Collection har en konstruktor K(Collection c) (som tar en godtycklig samling) Därmed kan man lätt konvertera mellan olika samlingar boolean containsall(collection<?> c) boolean addall(collection<? extends E> c) boolean removeall(collection<?> c) boolean retainall(collection<?> c) void clear() E[] toarray() Objectorienterad programmering Sida 18 Objectorienterad programmering Sida 20

Collections: Ett exempel import java.util.*; Iteratorer Tre operationer på Iterator<E> boolean hasnext(); E next(); void remove(); class A { public static void main(string args[]) { List<String> l = new ArrayList<String>(); for (int i=0; i<args.length; i++) l.add(args[i]); System.out.println(l); Objectorienterad programmering Sida 21 Objectorienterad programmering Sida 23 Lite om utökade for-loopar Man kan skriva for(type x : c) { om c är av en typ som implementerar gränssnittet Iterator. Detta översätts till kod som använder iteratorer. (Jfr exemplet Simple.java) Körexempel $ javac A.java $ java A en gång är ingen gång [en, gång, är, ingen, gång] $ Denna notation kan även användas för iteration över arrayer. Objectorienterad programmering Sida 22 Objectorienterad programmering Sida 24

Exempel: LinkedList Program B.java Exempel: HashSet Exempel (med for-loopar) Program: D.java Program C.java Objectorienterad programmering Sida 25 Objectorienterad programmering Sida 27 Gränssnittet Set Representerar mängder En samling föremål, utan inbördes ordning samma operationer som Collection Implementeras av HashSet och TreeSet (TreeSet implementerar även SortedSet) Gränssnittet SortedSet En mängd som garanterar att dess iterator kommer att traversera mängden enligt elementens naturliga ordning, eller enligt en Comparator (en slags jämförelseoperator) som ges till konstruktorn, Alla element som sätts in i en sorterad mängd måste antingen implementera gränssnittet Comparable (eller accepteras av en given Comparator) Objectorienterad programmering Sida 26 Objectorienterad programmering Sida 28

SortedSet<E>, operationer E first() Returnerar första elementet E last() Sista elementet SortedSet subset(e a, E b) returnerar en vy bestående av alla element i mängden från och med element a fram till (men exklusive) element b Körexempel TreeSet $ javac E.java $ java E bättre en fågel i handen än tio i skogen [bättre, en, fågel, handen, i, skogen, tio, än] $ java E ö åra älv [älv, åra, ö] $ Objectorienterad programmering Sida 29 Objectorienterad programmering Sida 31 Exempel: TreeSet public class E { public static void main(string args[]) { Set<String> l = new TreeSet<String>(); for (String s : args) l.add(s); Kort mellanspel 1 Gränssnittet Comparator<E> definierar metoden public int compare(e o1, E o2) som jämför sina två argument och returnerar ett negativt tal om första argumentet är mindre än det andra System.out.println(l); noll om dom är lika ett positivt tal om första argumentet är större. Objectorienterad programmering Sida 30 Objectorienterad programmering Sida 32

Kort mellanspel 2 Svensk sortering Klassen Locale representerar en geografisk, politisk eller kulturell region. Skriv new Locale("sv", "se") för svenska språket (sv) och Sverige (se). Klassen Collator implementerar gränssnittet Comparator<Object>. Den har en statisk metod Collator getinstance(locale desiredlocale) Körexempel: Svensk sortering $ javac F.java $ java E Ögren Vallander Vikström Wiklund Åberg Änglund [Vallander, Vikström, Wiklund, Änglund, Åberg, Ögren] $ java F Ögren Vallander Vikström Wiklund Åberg Änglund [Vallander, Wiklund, Vikström, Åberg, Änglund, Ögren] $ som skapar en jämförelseoperator för en given region. Objectorienterad programmering Sida 33 Objectorienterad programmering Sida 35 Exempel: Svensk sortering class F { public static void main(string args[]) { Collator collator = Collator.getInstance(new Locale("sv", "se")); SortedSet l = new TreeSet(collator); [...] Gränssnittet List<E> En sekvens av objekt där samma objekt kan förekomma flera gånger Operationer ur Collection E get(int index) E set(int index, E element) get set E add(int index, E element) int indexof(e element) Objectorienterad programmering Sida 34 Objectorienterad programmering Sida 36

Gränssnittet List: implementationer List implementeras av ArrayList och LinkedList ArrayList Access via position är snabbt. Att skjuta in eller ta bort element (med add och remove) är dyrt. LinkedList Access via position är dyrt. Gränssnittet Map<K, V>: operationer V put(k key, V value) V get(object key) V remove(object key) boolean containskey(object key) boolean containsvalue(object key) int size() boolean isempty() Objectorienterad programmering Sida 37 Objectorienterad programmering Sida 39 Gränssnittet Map<K,V> En avbildning, eller tabell Skansholm: Avbildningstabell Idé: En association mellan objekt. (K nycklar; V värden) Exempel: en telefonkatalog. Givet ett namn kan vi ta fram telefonnummer Implementeras av HashMap<K,V> och TreeMap<K, V> TreeMap<K, V> implementerar även SortedMap<K, V> Gränssnittet Map (forts) void putall(map<? extends K,? extends V> t) void clear() Set<K> keyset() Collection values() Set<V> entryset() Gränssnittet Map.Entry<K, V>: K getkey() V getvalue() V setvalue(v) Objectorienterad programmering Sida 38 Objectorienterad programmering Sida 40

Autoboxing/unboxing i java 5.0 I Java 5.0 sker konverteringen automatiskt, man kan skriva Hitta duplicerade ord med HashSet Program: FindDups.java, FindDups2.java Integer x = 42; int y = x; Man kan klara sig utan de primitiva typerna: Integer s = 0; for (Integer i = 0; i<10; i++) { s = s + i; Antagligen ej att rekommendera! (Varför inte?) Objectorienterad programmering Sida 41 Objectorienterad programmering Sida 43 Autoboxing/unboxing, bakgrund För var och en av de åtta primitiva datatyperna finns en motsvarande klass, tex int Integer boolean Boolean Man kan konvertera mellan genom att skriva Räkna antal förekomster Program: Freq.java, Freq2.java Integer x = new Integer(42); int y = x.intvalue(); Objectorienterad programmering Sida 42 Objectorienterad programmering Sida 44

Kort mellanspel: Klassen StringBuffer Exempel: x = "a" + 4 + "c" kan även skrivas x = new StringBuffer().append("a").append(4).append("c").toString() Konstruktorer: StringBuffer(String s) StringBuffer(int l) Metoder Perm2.java Problem: Givet en fil med ord, hitta ord som är varandras permutationer. Lösning: Definiera en funktion alphabetize som tar en sträng och returnerar en sträng med bokstäverna i alfabetisk ordning. Bygg en tabell Map<String,List<String>> där strängarna läggs in enligt den alfabetiserade nyckeln. Två strängar med samma nyckel är varandras permutationer och hamnar på samma lista. Objectorienterad programmering Sida 45 Objectorienterad programmering Sida 47 StringBuffer append (boolean b) char charat(int i) void setcharat(int i, char c) String tostring() Definiera en egen ordning på strängar (CaseInsensitiveComparator). Definiera en klass med en egen ordning (Person) enligt: 1. Ordna först efter namn, 2. sen efter ålder En klass med egen ordning, Person2, som låter alla över 65 få företräde. Objectorienterad programmering Sida 46 Objectorienterad programmering Sida 48