Samlingar Collection classes

Relevanta dokument
Samlingar Collection classes

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

Collection Classes. bjectorienterad programmering Sida 1

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

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Interfacen Set och Map, hashtabeller

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

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

Länkade strukturer. (del 2)

Föreläsning 10 Innehåll

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Diskutera. Hashfunktion

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

Föreläsning 11 Innehåll

Inlämningsuppgift och handledning

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.

Generiska programenheter. Generiska programenheter Samlingar

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

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

Objektorienterad Programkonstruktion

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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

Tentamen, EDAA30 Programmering i Java fortsättningskurs

DAT043 - föreläsning 8

Föreläsning 2 Innehåll

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Stackar, köer, iteratorer och paket

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

Javas inbyggda datastrukturer

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

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

Länkade strukturer, parametriserade typer och undantag

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

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

Föreläsning 4 Innehåll

Föreläsning 9. Generiska programenheter Samlingar

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

Föreläsning 2 Datastrukturer (DAT037)

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

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

Arrayer. results

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

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

Föreläsning 2 Innehåll

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

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

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

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

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

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

17.9 Funktioner för avbildningstabeller

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

Arrayer (fält)

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

Programmering fortsättningskurs

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Sammansatta datatyper Generics: Parametrisk polymorfism

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

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

Uno Holmer, Chalmers, :28 Uno Holmer, Chalmers, :28

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Objektorienterad Programmering (TDDC77)

Föreläsning 1 Datastrukturer (DAT037)

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

Föreläsning 14 Innehåll

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

(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

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

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

Algoritmer och datastrukturer 2012, fo rela sning 8

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

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

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

I ett program hantera man ofta samlingar av objekt av samma typ.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Generisk klass med typparameter Inre klass - ListIterator

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

Transkript:

Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 juni 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections 1

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 2

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) 3

Samlingar (forts) 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 4

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

Collections, ett första exempel Simple.java Simple142.java Samma exempel i gamla Java 6

Interface för samlingar Collection Map Set List SortedMap SortedSet 7

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 8

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 9

Operationer på Collection <E> int size() boolean isempty() boolean contains(object element) boolean remove(object element) boolean add(e element) Iterator<E> iterator() add och remove returnerar true om samlingen ändras till följd av operationen. Ett objekt av klassen iterator (en iterator) är ett slags index eller pekare som används om man vill gå igenom alla element i en samling. 10

Operationer på många element boolean containsall(collection<?> c) boolean addall(collection<?> c) boolean removeall(collection<e> c) containsall testar om alla element i en viss samling innehåller alla element i en annan samling addall adderar alla element ur en samling till en annan removeall tar bort de element som ingår i den andra samlingen 11

Operationer på många element (forts) boolean retainall(collection<?> c) void clear() E[] toarray() retainall sparar endast de element som ingår i den andra samlingen clear tar bort alla element toarray Skapar en array med samma element 12

Iteratorer Tre operationer på Iterator<E> boolean hasnext(); E next(); void remove(); 13

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. 14

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); } } 15

Körexempel $ javac A.java $ java A en gång är ingen gång [en, gång, är, ingen, gång] $ 16

Exempel: LinkedList Program B.java 17

Exempel (med for-loopar) Program C.java 18

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) 19

Exempel: HashSet Program: D.java 20

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) 21

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 22

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); 23

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, ö] $ 24

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. 25

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. 26

Exempel: Svensk sortering import java.util.*; import java.text.*; class F { public static void main(string args[]) { Collator collator = Collator.getInstance(new Locale("sv", "se")); SortedSet l = new TreeSet(collator); for (int i=0; i<args.length; i++) l.add(args[i]); System.out.println(l); }} 27

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] $ 28

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 returnerar element vid viss position set skriver över tidigare element vid viss position 29

List operationer ur Collection (forts) E add(int index, E element) int indexof(e element) ListIterator listiterator() add gör insättning vid viss position indexof position för första förekomst av elementet, 1 om elementet inte finns 30

Gränssnittet List (forts) ListIterator är en utökning av gränssnittet Iterator där man kan traversera framåt och bakåt modifiera sekvensen vid traversering plocka fram position för olika element 31

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. 32

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> 33

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() 34

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) 35

Hitta duplicerade ord med HashSet Program: FindDups.java, FindDups2.java 36

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(); 37

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?) 38

Räkna antal förekomster Program: Freq.java, Freq2.java 39

Kort mellanspel: Klassen StringBuffer Exempel: x = "a" + 4 + "c" kan även skrivas x = new StringBuffer().append("a").append(4).append("c").toString() Den senare satsen skapar en ny (tom) stringbuffer, tar strängrepresentationen av varje operand i tur och ordning och konkatenerar till buffern. Vinst: Vi undviker att allokera ett antal temporära strängar. 40

Operationer på StringBuffer Ungefär som String, men tillåter uppdatering StringBuffer(String s) StringBuffer(int l) en buffer av längd l, som från början är tom StringBuffer append (boolean b) (Samma för alla andra primitiva datatyper) 41

StringBuffer Operationer (forts) StringBuffer insert (int i, boolean b) skjuter in stängen vid position i char charat(int i) void setcharat(int i, char c) Viktigaste operationer: append och insert (tar alla typer) 42

StringBuffer: Exempel Anta att z en strängbuffer med innehåll start". efter metodanropet z.append(le") innehåller z strängen startle". Om vi i stället gör metodanropet z.insert(4, le") kommer z att innehålla starlet". Varje strängbuffer har en viss kapacitet. Om kapaciteten överskrids, allokeras en större intern array. 43

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. 44

Sammanfattning Javas standardbibliotek definierar ett antal datastrukturer collections Tack vare interfacebegreppet kan vi använda de olika samlingarna på ett likformigt sätt Kraftfullt, och egentligen inte så komplicerat För att använda dem effektivt krävs nog att man tänker om en smula 45