Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Algoritmer och data strukturer -Länkade listor
Fortsättningskurs i Programmering lektion 6
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Arv.
i olika programmeringsspråk
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Vektorer (klassen Vector) Sortering
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
Reflektioner kring OU1 Generellt sett bra kvalitet på dokumentationen! Första intryck... –Skulle du lämna in en jobbansökan med ett häftstift/gem eller.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Datastrukturer och algoritmer Föreläsning 3. Datastrukturer och algoritmer VT08 Innehåll  Fält och Tabell  Att läsa: Kapitel 5-6.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
Gruppövning Applikationsprogramering Klassuppdelning Loose Coupling Model View Controller Inversion of Control Layout med Swing JSplitPane Mouse-over Events.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Lycka till med din dator! Fler guider på Good Luck!
RMI Av: Josefina & Sarah DS04.
Regiongemensam elevenkät 2016
Föreläsning 3: Booleans, if, switch
Föreläsning 4: for, while, do-while
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Föreläsning 2: Typer, klasser, tilldelning
Föreläsning 9: Arv och UML
Föreläsning 5: Att använda klasser & objekt
Algoritmer och datastrukturer
Regiongemensam elevenkät 2016
Kan du begreppen? Para ihop rätt begrepp med rätt beskrivning. Algoritm Precis Program Är ett annat ord för exakt, tydlig eller noggrant. Är klara och.
Algoritmer och datastrukturer,förel. 10
Algoritmer och datastrukturer, förel. 1
Regiongemensam elevenkät 2016
Lathund-Ladok Hantera mallar för intyg
Presentationens avskrift:

Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några vanliga datastrukturer Tillämpningar Tidskomplexitet Standardklasser Standardalgoritmer Begreppen används lite flytande Öppna JavaDoc (för att visa arvsstruktur i API m.m.) På sista bilden finns lite standardalgoritmer. I mappen generator finns ett demoexempel. ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Datatyp En datatyp är en mängd av värden Ex. int, char, boolean, double, Person, String Typer som int, char, boolean och float kallas ibland konkreta datatyper eftersom de är inbyggda i språket och har en direkt representation i datorns minne Definitionen av en datatyp säger ej nödvändigtvis vilka operationer som är giltiga för den nya typen För att konstruera de två sista behövs typkonstruerare: fält Poster Weiss:s upplägg Java Algoritmer & byggstenar Applikationer Implementationer Avancerat ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Abstrakt datatyp En Abstrakt DataTyp (ADT) består av en datatyp (en mängd av värden) operationer som är giltiga för värden av typen axiom som beskriver operationernas betydelse Ex. heltalen tillsammans med de aritmetiska operationerna + - * / och lagarna för aritmetik En abstrakt datatyp definierar inte hur värden av typen representeras i en dator En abstrakt datatyp kan implementeras på olika sätt Axiomen kan anges formellt Finns verktyg för att generera kod från axiom En del menar ADT när de säger datatyp ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Datastruktur Representation av data (värden) och operationer i en abstrakt datatyp En datastruktur är en konkret implementering av en abstrakt datatyp -- med hjälp av typbildnings- konstruktioner i ett programmeringsspråk: Datarepresentation för typens värden int, char, boolean, float + fält, post (struct), pekare, ... Algoritmer för typens operationer metoder, operatorer Lagringsstruktur data - värde - objekt ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Exempel på datastrukturer ADT:n ”Mängd av heltal” med operationerna add och contains implementeras av datastrukturerna SimpleSet och SetOfInt (båda representeras som fält - men på olika sätt) ADT:erna Stack (Last-In-First-Out) Kö (First In First Out) kan t.ex. representeras med: Ur användarens synvinkel är det samma abstrakta datatyp (... nästan) Man kan naturligtvis representera en mängd med en länkad lista oxå Visa några bilder från förra gången? Fält Länkad lista ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Datastrukturers resurskrav Datarepresentationen påverkar datastrukturens minnesbehov beräkningstiden för strukturens operationer Fält + snabb åtkomst av samtliga element - ofta outtnyttjat minne (overhead) Länkad lagring + minnesåtgången motsvarar behovet, men ... - en (eller flera) extra pekare per dataelement - åtkomst av vissa element kan vara långsam Fältdubblering kräver max 3N Access Fält: O(1) Länkad lagring <= O(N) Visa länkade listan igen - I en linjär struktur måste man navigera från början! - i en förgrenad tar man sig fram snabbare ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Några vanliga ADT:er Stack LIFO Kö FIFO Lista flexibel access Sökträd ordnad mängd HashTabell oordnad mängd Prioritetskö ordnad kö Map avbildningstabell (associationslista) != java men ung. samma ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Stack LIFO = Last In First Out Operationer push(x) Lägger x överst på stacken pop() Tar bort översta elementet top() Returnerar översta elementet isEmpty() Avgör om stacken är tom x push(x) top pop Algebraiska datatyper Stackaxiom: (Vs)(Vx)(s.push(x).top() = x) (Vs)(Vx)(s.push(x).pop() = s) Alla strukturer har Insättning av nytt element Kolla om tom Kolla om element finns Uttag av element ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Kö FIFO = First In First Out Operationer enqueue(x) Lägger x sist i kön dequeue() Tar bort första elementet getFront() Returnerar första elementet isEmpty() Avgör om kön är tom y x enqueue(x) getFront dequeue Köaxiom: (Vq)(Vx)(q.isEmpty() => q.enqueue(x).getFront() = x) (Vq)(Vx)(q.isEmpty() => q.enqueue(x).dequeue().isEmpty()) I Java: assert(q.isEmpty()); q.enqueue(x); q.dequeue(); ett exempel till  ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Lista Insättning och uttag kan göras i valfri position a c d e f b Fler möjligheter => fler felsituationer.  detta gäller förra bilden assert(q.isEmpty()); assert(x != y); q.enqueue(x); q.enqueue(y); assert(q.getFront() == x); q.dequeue(); assert(q.getFront() == y); ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Sökträd Ordnat binärt träd utan duplikat (ordnad mängd) Operationer add(x) Sätter in x i trädet contains(x) Söker efter x i trädet remove(x) Tar bort x ur trädet isEmpty() Avgör om trädet är tomt y x > y x < y ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Hashtabell Tabellbaserad struktur utan duplikat (oordnad mängd) Operationer add(x) Sätter in x i tabellen contains(x) Söker efter x i tabellen remove(x) Tar bort x ur tabellen isEmpty() Avgör om tabellen är tom ”Kalle” ”Allan” 1 2 … N-1 hash() ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Prioritetskö Snabb access av minsta elementet (ordnad kö) Operationer add(x) Lägger x i kön peek() Returnerar minsta elementet remove() Tar bort minsta elementet isEmpty() Avgör om kön är tom y x > y ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Map Tabell för namn-värde-avbildningar Operationer add(k,x) Sätter in avbildningen (k,x) i tabellen get(k) Returnerar värdet med nyckeln k remove(k) Tar bort nyckeln k ur tabellen isEmpty() Avgör om tabellen är tom 031-123456 ”Kalle” ”Allan” 023-112112 Kan implementeras med träd eller hashteknik ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Tillämpningar ADT:er är ofta viktiga hjälpmedel i algoritmer ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Stack Lagring av aktiveringsposter i blockstrukturerade programmeringsspråk. Reversering av dataström DFS = Djupet Först Sökning i grafer och träd Ex. kommandot back i Zuul (sökning efter ett visst rum) Ex. parentesmatchning (()([]())) ([)] x,y,z,… …,z,y,x En räknare klarar inte parentesmatchningsproblemet ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

FIFO-kö Operativsystem BFS = Bredden Först Sökning i grafer och träd Ex. Nivåvis genomlöpning av träd Ex. Släck ljuset rum för rum i ett hus Beräkning av kortaste avstånden i en oviktad graf 4 3 2 1 Starta med 1 och lägg 2 2 2 2 2 2 2 2 i kön, o.s.v. Stack för DFS x 3 (in-, pre-, postorder) Ickelinjära strukturer svårare att traversera än linjära ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Binära sökträd Ex. Ordlistor Ordnade mängder med stor förändringsintensitet Om sökning blandas med insättningar och uttag blir linjära strukturer som listor och fält alltför ineffektiva sök blanda uttag alltför med Jfr ordnat fält med binärsökning Statisk vs dynamisk sökning ev. liten bild på fält på tavlan < Fältet Mittelement: c x < c till vänster x > c till höger ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Hashtabell Symboltabeller i kompilatorer Oordnade mängder med stor förändringsintensitet Sökning blandat med insättningar och uttag Spelprogram Ex. memorering av spelställningar i ett schackparti ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Prioritetskö Operativsystem Datakompression med Huffmans algoritm MST = Minsta Uppspännande Trädet i grafer Dijkstras algoritm för kortaste avstånden i viktad graf Huffman används i JPEG (nånstans…) ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Tidskomplexitet hos vanliga datastrukturer Access, T(N) Kommentar Stack Sist insatta, O(1) Mycket snabb FIFO-kö Först insatta, O(1) Länkad lista Valfritt element, O(N) Linjärsökning Sökträd Valfritt element, O(log N) AC, WC (kräver balansering av trädet) Hashtabell Valfritt element, O(1) AC Prioritetskö finnMinsta, O(1) tagBortMinsta, O(log N) insättning är O(1) i genomsnitt, men O(log N) i värsta fall (WC) WC = Worst Case (Värsta fallet) AV = Average Case (I genomsnitt) T(N) = tidsåtgång när operationen i fråga appliceras på en struktur av storlek N T(N) är O(f(N)) omm T(N) är uppåt begränsad av f(N) O(1) betyder att operationen tar konstant tid (beror ej av N) “State of the art” En implementering skall klara detta. ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Standardklasser i Java (Weiss kap. 6) Standardalgoritmer ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Objektsamlingar och avbildningstabeller Implementeringsteknik (datastruktur) Hashtabell Flexibelt fält Balanserat sökträd Länkad lista Gräns-snitt (ADT) Set HashSet TreeSet List ArrayList LinkedList Map HashMap TreeMap Det mesta här finns i java.util Olika klassificeringar ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Implementeringsteknik Köer Implementeringsteknik Binär hög Länkad lista Gräns-snitt Queue PriorityQueue LinkedList ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Behållare och asssociativa datastrukturer Ordnade Oordnade Behållare TreeSet HashSet ArrayList LinkedList Vector PriorityQueue Stack Associativa TreeMap HashMap I en ordnad behållare ordnas elementen relativt ett jämförelsepredikat. ArrayList, LinkedList, Vector och Stack är naturligtvis ordnade i den mening att insättningsordningen bevaras. RAST ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

public interface Iterable<E> public Iterator<E> iterator() Returns an iterator over a set of elements of type E Ex. public class SomeClass implements Iterable<SomeType> { public Iterator<SomeType> iterator(); ... } visa denna bild ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

public interface Iterator<E> boolean hasNext()           Returns true if the iteration has more elements.  E next()           Returns the next element in the iteration.  void remove()         Removes from the underlying collection the last element returned by the iterator. Remove: Optional operation: I skelettklass finns då implementering som kastar NotSupportedException Man kan välja att definiera om den ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

public interface Collection<E> extends Iterable<E> boolean add(E o)           Ensures that this collection contains the specified element.  boolean addAll(Collection<? extends E> c)           Adds all of the elements in the specified collection to this collection.  void clear()           Removes all of the elements from this collection.  boolean contains(Object o)           Returns true if this collection contains the specified element.  int size()           Returns the number of elements in this collection.  boolean isEmpty()           Returns true if this collection contains no elements. Iterator<E> iterator()          Returns an iterator over the elements in this collection. boolean remove(Object o)          Removes a single instance of the specified element from this collection. Object[] toArray()           Returns an array containing all of the elements in this collection. + others visa denna bild ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Förenklad iterering f.o.m. Java 5 SomeClass someCollectionObject ... for ( type variable : someCollectionObject ) { ... } Iterator itr = someCollectionObject.iterator(); while (itr.hasNext()) { type variable = itr.next(); Alla klasser som implementerar gränssnittet Iterable kan hanteras med den förenklade for-loopen, samt fält. Anv. för avläsning av samtliga element Kompilatorn översätter automatiskt till iteratorformen (eller indexering om det är ett fält). Jämför en del scriptspråk ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Ex. Förenklad iterering HashSet<Integer> hs = new HashSet<Integer>(); ... for ( Integer x : hs ) System.out.println(x); ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Abstrakta mallklasser Gränssnitt public Interface Int Implementerar vissa grundmetoder Abstrakt mallklass public abstract class AbsCls implements Int Denna teknik förekommer ofta i standardbiblioteken. Exempel: … Implementerande subklasser kan välja att ärva från den abstrakta klassen, eller att implementera hela gränssnittet. Konkret klass public class Cls1 extends AbsCls Konkret klass public class Cls2 implements Int ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

AbstractSequentialList Mallklasser Iterable Object Map Collection AbstractMap List Set AbstractCollection Queue AbstractList AbstractSet AbstractQueue De flesta implementerar dessutom Cloneable och Serializable Skippa övriga! AbstractSequentialList ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Linjära liststrukturer Iterable Object Collection List AbstractCollection Queue AbstractList AbstractSequentialList OBS! En länkad lista är en FIFO-kö (bl.a.) ArrayList LinkedList ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Direktaccesstrukturer Iterable Object Collection List AbstractCollection RandomAccess AbstractList RandomAccess är ett ”marker interface”. - kan testas med instanceof En subklass kan text ta reda på om basklassen har en effektiv indexoperation (=direktaccess) Vector är synkroniserad till skillnad från ArrayList ArrayList Vector ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Stackar och prioritetsköer Iterable Object Collection List RandomAccess AbstractCollection Queue AbstractList AbstractQueue Vector PriorityQueue Stack ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Mängdstrukturer Ligger mapparna här? Iterable Iterable Iterable Object Collection Collection Collection Set Set AbstractCollection SortedSet SortedSet AbstractSet Ligger mapparna här? Nej mappar är inte samlingar i java TreeSet HashSet ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Associativa strukturer Map Object SortedMap AbstractMap TreeMap HashMap ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

public interface Map<K,V> void clear()           Removes all mappings from this map (optional operation).  boolean containsKey(Object key)           Returns true if this map contains a mapping for the specified key.  boolean containsValue(Object value)           Returns true if this map maps one or more keys to the specified value.  Set<Map.Entry<K,V>> entrySet()           Returns a set view of the mappings contained in this map.  V get(Object key)           Returns the value to which this map maps the specified key. boolean isEmpty()           Returns true if this map contains no key-value mappings.  Set<K> keySet()           Returns a set view of the keys contained in this map.  V put(K key, V value)           Associates the specified value with the specified key in this map. V remove(Object key)           Removes the mapping for this key from this map if it is present.  int size()           Returns the number of key-value mappings in this map.  Collection<V> values()           Returns a collection view of the values contained in this map. OBS, två typvariabler, en för nyckeltypen, en för värdetypen Map.Entry<K,V> är deklarerad lokalt i Map. ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Standardalgoritmer Statiska metoder i class Collections Används för linjära strukturer, t.ex. ArrayList och LinkedList Ex. LinkedList<Integer> l = new LinkedList<Integer>(); for ( int i = 0; i < 10; i++ ) l.add(i); Collections.shuffle(l); Collections.sort(l); System.out.println(Collections.binarySearch(l,x)); Standardalgoritmer för linjära strukturer Förväxla ej med gränssnittet Collection Se exempel med generator ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Standardalgoritmer forts. rotate(List list,int distance) Rotates all of the elements in the list by the specified distance replaceAll(List list,Object oldVal,Object newVal) Replaces all occurrences of one specified value with another indexOfSubList(List source,List target) Returns the index of the first sublist of source that is equal to target lastIndexOfSubList(List source,List target) Returns the index of the last sublist of source that is equal to target swap(List,int,int) Swaps the elements at the specified positions in the specified list frequency(Collection,Object) Counts the number of times the object occurs in the collection disjoint(Collection,Collection) Determines whether two collections are disjoint addAll(Collection,elements...) Adds specified elements to the collection addAll kan ta ett fält eller en uppräkning av enstaka element Notera att en generell swap inte kan skrivas i Java Labtips! ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Standardalgoritmer forts. sort(List) Sorts a list using a merge sort algorithm binarySearch(List,Object) Searches for an element in an ordered list using the binary search algorithm shuffle(List) Randomly permutes the elements in a list fill(List,Object) Overwrites every element in a list with the specified value copy(List dest,List src) Copies the source list into the destination list min(Collection) Returns the minimum element in a collection max(Collection) Returns the maximum element in a collection MergeSort kräver mer minne än Qsort. ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Equals Alla klasser ärver metoden equals från Object. Den ärvda metoden ger pekarlikhet vilket i allmänhet är alltför diskriminerande. En korrekt överskuggning av equals bör ha följande form public class SomeClass { ... public boolean equals(Object obj) { if ( obj == null || getClass() != obj.getClass() ) return false; else { SomeClass tmp = (SomeClass)obj; jämför instansvariablerna i detta objekt med variablerna i obj och returnera resultatet } Detta är ett sätt att definiera equals. Denna är ganska diskriminerande eftersom den kräver att typerna är exakt samma. Titta på DAT050, förel 14 ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Equals - exempel public class GeometricObject { private int x = 0; private int y = 0; public GeometricObject(int x,int y) { this.x = x; this.y = y; } public boolean equals(Object obj) { if ( obj == null || getClass() != obj.getClass() ) return false; else { GeometricObject tmp = (GeometricObject)obj; return x == tmp.x && y == tmp.y; } ... ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4

Equals - exempel Basklass-equals sköter klasstestet public class Circle extends GeometricObject { private int radius; public Circle(int x,int y,int radius) { super(x,y); this.radius = radius; } public boolean equals(Object obj) { return super.equals(obj) && radius == ((Circle)obj).radius; } ... Basklass-equals sköter klasstestet ©Uno Holmer, Chalmers, 2018-12-07 12:35 www.cse.chalmers.se/~holmer/ LET375, D2+I2, 15/16, lp4