F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Relevanta dokument
Länkade strukturer. (del 2)

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

Samlingar Collection classes

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

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

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

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

Föreläsning 3. Stack

Föreläsning 3. Stack

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

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

Föreläsning Datastrukturer (DAT036)

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

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

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

Datastrukturer. föreläsning 3. Stacks 1

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

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

Föreläsning 4 Innehåll

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

Stackar, köer, iteratorer och paket

Föreläsning 2 Innehåll

Samlingar Collection classes

Arrayer. results

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

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

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

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

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

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

Repetition av OOP- och Javabegrepp

Collection Classes. bjectorienterad programmering Sida 1

OOP Objekt-orienterad programmering

Repetition av OOP- och Javabegrepp

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

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

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

Föreläsning 2 Datastrukturer (DAT037)

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

DAT043 - föreläsning 8

Objektorienterad Programmering (TDDC77)

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 2 Innehåll

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Lösningsförslag till exempeltenta 2

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

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

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

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

DAT043 Objektorienterad Programmering

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Föreläsning 14 Innehåll

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

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

Objektorienterad Programkonstruktion

Föreläsning Datastrukturer (DAT036)

So far... For recursive and iterative programs. Bubble, insertion, selection, quick, merge, counting

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Programmering fortsättningskurs

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

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

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

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Laboration A Objektsamlingar

Objektorienterad Programmering (TDDC77)

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Generisk klass med typparameter Inre klass - ListIterator

Föreläsning 12. Länkade listor

Tentamen i Algoritmer & Datastrukturer i Java

Saker du ska kunna Föreläsning 13 & 14

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

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Föreläsning 2 Datastrukturer (DAT037)

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Länkade strukturer, parametriserade typer och undantag

Tentamen i Algoritmer & Datastrukturer i Java

LÖSNINGSFÖRSLAG

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

TDDD78 Viktiga begrepp, del 2

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

public boolean containskey(string key) { return search(key, head)!= null; }

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

Transkript:

F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se

Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder vanligen Lägg till objekt (add, put) Ta bort objekt (remove, clear) Hitta objekt (contains, indexof, get)

Collections (samlingar) En instans ur en collection-klass har en egen datamängd av referenser Add, remove, m.m. hanterar endast referenser Olika instanser av collection kan därför samtidigt hantera samma objekt Set foo Set bar

Collections (samlingar) En collection är en samling data och operationer på dessa data Tillsammans utgör de en abstrakt datatyp Hur samlingen hanterar sitt innehåll är dolt (inkapslat) Samlingen har ett väldefinierat gränssnitt

Interface java.util.collection add(e e) addall(collection) clear() contains(object o) containsall(collection) equals(object o) hashcode() isempty() iterator() remove(object o) removeall(collection) retainall(collection) size() toarray() toarray(t[] a)

Interface och implementationer (java.util) Interface Collection och dess sub-interface BlockingDeque BlockingQueue Deque List NavigableSet Queue Set SortedSet

ArrayList ArrayList är en samling baserad på en intern array Objekt som adderas placeras i arrayen Om arrayen tar slut skapas en ny, längre array

ArrayList content size=4 Harry Lulu Eva Mika

ArrayList content size=4 add( Karin ) Harry Lulu Eva Mika

ArrayList content size=4 add( Karin ) Arrayen är full: skapa ny array Harry Lulu Eva Mika

ArrayList content size=4 add( Karin ) Harry Lulu Arrayen är full: skapa ny array Kopiera referenserna Eva Mika

ArrayList content size=4 add( Karin ) Harry Lulu Arrayen är full: skapa ny array Kopiera referenserna Släpp den gamla arrayen Eva Mika

ArrayList content size=5 add( Karin ) Harry Eva Lulu Karin Arrayen är full: skapa ny array Kopiera referenserna Släpp den gamla arrayen Lägg till den nya referensen Mika

ArrayList content size=5 remove( Eva ) Harry Lulu Karin Eva Mika

ArrayList content size=5 remove( Eva ) Harry Lulu Karin Från Eva, skifta alla referenser ett steg Eva Mika

ArrayList content size=4 remove( Eva ) Harry Lulu Karin Från Eva, skifta alla referenser ett steg Uppdatera storleken Mika

ArrayList Snabbt tillägg till slutet av listan Arrayen behöver inte växa så ofta Borttag kan vara kostsamma om listan är lång om det sökta elementet är i början av listan

Länkad lista list public class Node { Object ; Node ;

Länkad lista add (i slutet) list

Länkad lista add (i mitten) list

public class Node { Object ; Node ; public class LinkedList { private Node head; Länkad lista - add protected void addlast(node nd) { for (Node search = head; search.!= null; search = search.); nd. = search.; search. = nd; Sök upp det sista elementet ( == null)

public class Node { Object ; Node ; public class LinkedList { private Node head; Länkad lista - add protected void addbefore(node nd, Node before) { for (Node search = head; search.!= before; search = search.); nd. = search.; search. = nd; protected void addlast(node nd) { addbefore(nd, null); Sök upp ett givet element (referens), sätt in före det

public class Node { Object ; Node ; public class LinkedList { private Node head; Länkad lista - add protected void addafter(node nd, Node after) { for (Node search = head; search!= after; search = search.); nd. = search.; search. = nd; Sök upp ett givet element, stoppa in efter det

Länkad lista - add public class Node { Object ; Node ; public Node (Object o) { = o; public class LinkedList { private Node head; protected void add (Node nd) { if (head == null) { head = nd; else { addafter(nd, head); public void add(object o) { add (new Node(o)); Internt hanterar vi noder Utåt hanterar vi objekt

Länkad lista - remove list

public class Node { Object ; Node ; public class LinkedList { private Node head; Länkad lista - remove protected void remove (Object o) { if (o.equals(head.)) { head = head.; else { for(node search = head; search!= null; search = search.) { if (o.equals(search..)) { search. = search..; break;

Dubbellänkad lista list prev prev prev prev public class Node { Object ; Node prev, ;

Länkad lista med header size=4 list front rear public class ListHeader{ Node front, rear;

Fler linjära datastrukturer Kö elementen läggs till sist och tas ut först FIFO First-in first-out (kassakö) enqueue dequeue empty in ut

Fler linjära datastrukturer Stack elementen läggs till först och tas ut först LIFO Last-in first-out (tallriksstapel) push pop peek empty in ut

En enkel stack public class Stack { private Object[] stack = new Object[MAX_STK_SIZE]; private int top = -1; public void push(object o) { stack[++top] = o; public Object pop() { return stack[top--]; public Object peek() { return stack[top]; public boolean isempty() { return top == -1;

En enkel stack II import java.util.stack; public static void main (String [] args) { Stack<String> stk = new Stack<String>(); stk.push( Harry ); stk.push( Eva ); stk.push( Kim ); System.out.println(stk.empty()); // false System.out.println(stk.peek()); // Kim System.out.println(stk.pop()); // Kim System.out.println(stk.pop()); // Eva System.out.println(stk.pop()); // Harry System.out.println(stk.empty()); // true StackDemo

Collections implementationer Vector lista ArrayList lista LinkedList - lista Stack stack PriorityQueue sorterad kö (minst först) ArrayDeque - kö ListDemo

Collections implementationer Hashtable lagrar par av nyckel och värde HashMap lagrar par av nyckel och värde HashSet mängd EnumMap par av enum-nyckel och värde EnumSet mängd för enums

Collections och generics Ofta är alla element i en collection av samma typ Kompilatorn kan hjälpa till med detta Då måste man berätta vilken typ man tänker sig på elementen. ArrayList<Integer> numbers; Variabeln Klassen är en ArrayList Som bara innehåller Integer-objekt numbers = new ArrayList<Integer>(); Ovanstående gäller givetvis även för parametrar.

Collections och generics Ofta är alla element i en collection av samma typ Kompilatorn kan hjälpa till med detta Då måste man berätta vilken typ man tänker sig på elementen. Datatypen ArrayList<Integer> numbers; Variabeln Klassen är en ArrayList Som bara innehåller Integer-objekt numbers = new ArrayList<Integer>(); Ovanstående gäller givetvis även för parametrar.

Utan generics ArrayList numbers = new ArrayList(); for (int i = 0; i < 100; i++) { numbers.add(new Integer(i)); numbers.add( Kraken ); // detta accepteras numbers.add(new Vector()); // detta också while (!numbers.isempty()) { Object obj = numbers.remove(0); if (obj instanceof Integer) { int n = ((Integer) obj).intvalue();

Med generics och autoboxing ArrayList<Integer> numbers = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) { numbers.add(i); // autoboxing numbers.add( Kraken ); // kompileringsfel numbers.add(new Vector()); // kompileringsfel while (!numbers.isempty()) { int n = numbers.remove(0); // unboxing

(^_^ ) INGA FLER BILDER