Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade lösningar Datavetenskap (LTH) Föreläsning 14 HT 2018 1 / 8
Abstrakt datatyp (ADT) En abstrakt modell med de operationer man kan utföra på den: lista, stack, kö (FIFO) mängd (eng. set) map prioritetskö Datastruktur En samling variabler (ofta av samma typ) som hör ihop på något sätt: vektor enkellänkad lista, dubbellänkad lista balanserat binärt sökträd hashtabell heap Datavetenskap (LTH) Föreläsning 14 HT 2018 2 / 8
Vilken nivå ska kunskapen ha (detaljer helhet)? Exempel: map Du ska veta: att den abstrakta datatypen map beskriver en samling nyckel-värdepar där nycklarna är unika. Viktiga operationer är insättning, sökning efter en nyckels värde, borttagning. att map kan implementeras effektivt med hjälp av ett balanserat binärt sökträd eller en hashtabell. hur man implementerar en hashtabell och ett binärt sökträd. Du ska med hjälp av dokumentation kunna använda: Javas interface Map och klasserna TreeMap och HashMap. Du ska kunna lista ut saker som: Vilken av klasserna som passar bäst i ett visst sammanhang, tidskomplexiteten för metoden get i HashMap (dvs. sökning i en hashtabell),... Datavetenskap (LTH) Föreläsning 14 HT 2018 3 / 8
Skugga equals Inuti Javas samlingsklasser måste ibland element jämföras. Det ställer krav på den klass som beskriver de element som ska sättas in i samlingen. Exempel: Antag att vi skrivit en klass Book där två Book-objekt med samma isbn-nummer ska betraktas som lika. public class Book { private String isbn; private String title; Om vi sätter in Book-objekt i en lista av typen ArrayList<Book> eller LinkedList<Book> måste equals skuggas i klassen Book. Annars fungerar inte metoderna contains, remove,... som avsett. Datavetenskap (LTH) Föreläsning 14 HT 2018 4 / 8
Implementera Comparable eller Comparator I vissa sammanhang jämförs om ett element är mindre än, lika med, större än ett annat. Detta görs i klasser med binära sökträd (TreeSet<Book>, TreeMap<Book,...>) eller heapar (PriorityQueueu<Book>) samt vid sortering. Låt klassen Book implementera interfacet Comparable. public class Book implements Comparable<Book> { private String isbn; private String title; public int compareto(book o) { return isbn.compareto(isbn); } eller skicka med ett komparator-objekt i form av ett lambdauttryck (eller ett objekt av en egen klass som implementerar interfacet Comparator). Datavetenskap (LTH) Föreläsning 14 HT 2018 5 / 8
Skugga hashcode och equals I Javas klasser med hashtabeller används metoden hashcode (för att hitta rätt plats i vektorn) samt equals (för att söka efter en nyckel bland element med lika hashkod). Om man sätter in Book-objekt i en mängd av typen HashSet<Book> eller har nycklar av typen Book i en HashMap<Book,...>) så måste både hashcode och equals skuggas i klassen Book. public class Book { private String isbn; private String title; public int hashcode() {...} } public boolean equals(object other) {...} Datavetenskap (LTH) Föreläsning 14 HT 2018 6 / 8
Övrigt Förutom det som repeteras på föregående sidor har vi bland annat sysslat med Interface Exceptions Generiska klasser och metoder Länkade strukturer (enkellänkade listor, binära träd) Rekursion Tidskomplexitet Grafiska användargränssnitt (examineras inte på den skriftliga tentan). Sortering Datavetenskap (LTH) Föreläsning 14 HT 2018 7 / 8
Tentamensuppgifter med planterade fel Du har fått papper med fått några tentamensuppgifter (från 2017 08 149. Till varje uppgift finns en fingerad lösning med några typiska fel. Markera felen och rätta till dem. Datavetenskap (LTH) Föreläsning 14 HT 2018 8 / 8