Collection Classes. bjectorienterad programmering Sida 1

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

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

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

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

Interfacen Set och Map, hashtabeller

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

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

Föreläsning 10 Innehåll

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

Länkade strukturer. (del 2)

Diskutera. Hashfunktion

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

DAT043 - föreläsning 8

Föreläsning 11 Innehåll

Inlämningsuppgift och handledning

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

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

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

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

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

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

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

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

Objektorienterad Programkonstruktion

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

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 2 Innehåll

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

Generiska programenheter. Generiska programenheter Samlingar

Stackar, köer, iteratorer och paket

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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?

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

Föreläsning 4 Innehåll

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

Föreläsning 2 Datastrukturer (DAT037)

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

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

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Sammansatta datatyper Generics: Parametrisk polymorfism

OOP Objekt-orienterad programmering

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

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

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

Föreläsning 9. Generiska programenheter Samlingar

Tentamen, EDAA30 Programmering i Java fortsättningskurs

Föreläsning 2 Innehåll

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.

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

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

Objektorienterad Programmering (TDDC77)

Java, klasser, objekt (Skansholm: Kapitel 2)

Arrayer. results

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

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

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

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

Föreläsning 14 Innehåll

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Föreläsning 2 Datastrukturer (DAT037)

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

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 12. Generiska programenheter Designmönstret Iterator Samlingar. Generiska programenheter

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

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

Generisk klass med typparameter Inre klass - ListIterator

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Tentamen OOP

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

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

Laboration 13, Arrayer och objekt

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

TDDC77 Objektorienterad Programmering

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

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. bjectorienterad programmering Sida 1

Men först Repetition: Student.java, StudentTest.java Gränssnitt (Interface) Parametriska typer bjectorienterad programmering Sida 2

Interface En slags lättviktsklasser ungefär som abstrakta klasser. Definierar ett interface ( eller protokoll) Ett interface består av ett antal metodnamn med argumenttyper och resultattyper. Ett interface innehåller inte några datastrukturer eller någon programkod. bjectorienterad programmering Sida 3

Interface, första exempel public interface MyInterface { void amethod(int i); } public class MyClass implements MyInterface { public void amethod(int i) {... }... } bjectorienterad programmering Sida 4

Interface (forts) Vi säger att en klass implementerar ett interface. 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 bjectorienterad programmering Sida 5

Exempel på interface i Javas API EventListener Comparable List, Set, Map Iterator bjectorienterad programmering Sida 6

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 varje samling implementerar ett eller flera gränssnitt Flera utökningar i Java 5 underlättar: generaliserad for-loop, autoboxing/unboxing, generiska typer bjectorienterad programmering Sida 7

public class Box<X> { private X x; Generiska typer exempel public X getx() { return x; } } public void putx (X x0) { x = x0; } bjectorienterad programmering Sida 8

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); } Box<Integer> c = new Box<Integer> (); c.put(42); int i = c.getx(); System.out.println(i); bjectorienterad programmering Sida 9

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). bjectorienterad programmering Sida 10

Parametriska metoder class Id { public static <T> T id(t x) { return x; } } bjectorienterad programmering Sida 11

Jia: 8.2, Skansholm: 17 Collection Classes Se även Suns tutorial om Collections bjectorienterad programmering Sida 12

Motivation: 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 bjectorienterad programmering Sida 13

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) bjectorienterad programmering Sida 14

Repetition: Interface En slags lättviktsklasser. Beskriver en uppsättning metoder. Man säger att en klass implementerar ett interface. bjectorienterad programmering Sida 15

Collections, ett första exempel Simple.java Simple142.java Samma exempel i gamla Java bjectorienterad programmering Sida 16

Collection Map Interface för samlingar Set List SortedMap SortedSet bjectorienterad programmering Sida 17

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 bjectorienterad programmering Sida 18

Collection 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 bjectorienterad programmering Sida 19

Operationer på Collection <E> int size() boolean isempty() boolean contains(object element) boolean remove(object element) boolean add(e element) Iterator<E> iterator() bjectorienterad programmering Sida 20

Operationer på många element boolean containsall(collection<?> c) boolean addall(collection<? extends E> c) boolean removeall(collection<?> c) boolean retainall(collection<?> c) void clear() E[] toarray() bjectorienterad programmering Sida 21

Iteratorer Tre operationer på Iterator<E> boolean hasnext(); E next(); void remove(); bjectorienterad programmering Sida 22

Man kan skriva for(type x : c) { Lite om utökade for-loopar om c är av en typ som implementerar gränssnittet Iterator. Detta översätts till kod som använder iteratorer. (Jfr exemplet Simple.java) Denna notation kan även användas för iteration över arrayer. bjectorienterad programmering Sida 23

Collections: Ett exempel import java.util.*; 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); } } bjectorienterad programmering Sida 24

Körexempel $ javac A.java $ java A en gång är ingen gång [en, gång, är, ingen, gång] $ bjectorienterad programmering Sida 25

Exempel: LinkedList Program B.java Exempel (med for-loopar) Program C.java bjectorienterad programmering Sida 26

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) bjectorienterad programmering Sida 27

Exempel: HashSet Program: D.java bjectorienterad programmering Sida 28

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) bjectorienterad programmering Sida 29

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 bjectorienterad programmering Sida 30

Exempel: TreeSet public class E { public static void main(string args[]) { Set<String> l = new TreeSet<String>(); for (String s : args) l.add(s); } } System.out.println(l); bjectorienterad programmering Sida 31

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, ö] $ bjectorienterad programmering Sida 32

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 noll om dom är lika ett positivt tal om första argumentet är större. bjectorienterad programmering Sida 33

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) som skapar en jämförelseoperator för en given region. bjectorienterad programmering Sida 34

Exempel: Svensk sortering class F { public static void main(string args[]) { Collator collator = Collator.getInstance(new Locale("sv", "se")); SortedSet l = new TreeSet(collator); [...] }} bjectorienterad programmering Sida 35

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] $ bjectorienterad programmering Sida 36

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) bjectorienterad programmering Sida 37

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. bjectorienterad programmering Sida 38

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> bjectorienterad programmering Sida 39

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() bjectorienterad programmering Sida 40

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) bjectorienterad programmering Sida 41

Hitta duplicerade ord med HashSet Program: FindDups.java, FindDups2.java bjectorienterad programmering Sida 42

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 Integer x = new Integer(42); int y = x.intvalue(); bjectorienterad programmering Sida 43

Autoboxing/unboxing i java 5.0 I Java 5.0 sker konverteringen automatiskt, man kan skriva 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?) bjectorienterad programmering Sida 44

Räkna antal förekomster Program: Freq.java, Freq2.java bjectorienterad programmering Sida 45

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 bjectorienterad programmering Sida 46

StringBuffer append (boolean b) char charat(int i) void setcharat(int i, char c) String tostring() bjectorienterad programmering Sida 47

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. bjectorienterad programmering Sida 48

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. bjectorienterad programmering Sida 49