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

Relevanta dokument
Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E>

Föreläsning 9-10 Innehåll

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

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna

Föreläsning REPETITION & EXTENTA

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Repetition av OOP- och Javabegrepp

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Repetition av OOP- och Javabegrepp

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

OOP Objekt-orienterad programmering

Föreläsning 3-4 Innehåll

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

Föreläsning 2 Innehåll

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Del A (obligatorisk för alla)

Föreläsning 5-6 Innehåll

Tentamen, EDAA20/EDA501 Programmering

Tvådimensionella fält

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

Instuderingsfrågor, del E

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

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Arrayer. results

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

Föreläsning 13 Innehåll

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

Flerdimensionella fält och textfiler

Objektorienterad programmering

Föreläsning 14. Filhantering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

DAT043 Objektorienterad Programmering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Föreläsning 4 Innehåll

Föreläsning 2 Innehåll

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Tentamen OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Föreläsning 7-8 Innehåll

Föreläsning 1 & 2 INTRODUKTION

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

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

Länkade strukturer, parametriserade typer och undantag

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Samlingar Collection classes

Tentamen, EDA501 Programmering M L TM W K V

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

JAVAUTVECKLING LEKTION 7

for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

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

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 7. Flerdimensionella fält ArrayList. Flerdimensionella. ArrayList. In- och utmatning av data

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

Samlingar Collection classes

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

Del A (obligatorisk för alla)

Det här är samma program. Det här är ett program... Datorns delar. Maskinspråk och högnivåspråk. Maskinspråk (assembler, påhittat):

Objektorienterad programmering D2

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

Objektorienterad programmering i Java

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 7. for-satsen Fält

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

DAT043 - föreläsning 8

Tentamen i Objektorienterad programmering

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

F4. programmeringsteknik och Matlab

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Objektorienterad Programmering (TDDC77)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tommy Färnqvist, IDA, Linköpings universitet

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Transkript:

EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet java.util). innehåller alltid objekt (inte int, double,... ). lagrar sina element i en vektor. utökar vektorns storlek vid behov. har metoder för att sätta in och ta bort element... Avsnitt i läroboken: 7.8-7.9, 12.1-2, 12.8 Avsnitt 12.6 och 12.10 ingår inte i kursen, men är bra att läsa om du fortsätter med programmering på egen hand eller i någon annan kurs. 191 192 Viktiga operationer på ArrayList Generisk klass ArrayList<E>(); E get(int pos); void add(e obj); // konstruktor // elementet på plats pos // lägger in obj sist void add(int pos, E obj); // Lägger in obj på plats pos. // Efterföljande element flyttas. E remove(int pos); int size(); // Tar bort elementet på plats // pos, returnerar det borttagna // elementet. // antalet element En ArrayList är en generisk klass och kan innehålla objekt av godtycklig typ. Ersätt E med typen på de objekt som ska lagras i listan. Exempel där vi skapar en lista som kan innehålla Point-objekt och sätter in tre punkter i listan: ArrayList<Point> vertices = new ArrayList<Point>(); vertices.add(new Point(50, 50)); Vertices.add(new Point(50, 10)); Vertices.add(new Point(30, 40)); boolean isempty(); // true om listan är tom void clear(); // Tar bort alla element. 193 194

Övning Arraylist Traversera alla elementen i listan vertices Antag att en variabel list refererar till ett ArrayList-objekt. Mönster: x 50 Y 50 x 50 Y 10 x 30 Y 40 for (int i = 0; i < list.size(); i++) { // här kan elementet list.get(i) användas I klassen Point finns metoden: void move(int dx, int dy)! Skriv programkod för att flytta punkterna 10 i x-led och 20 i y-led: Anm. Detta sätt att traversera en lista fungerar bra då man använder en ArrayList. I Java finns flera olika klasser för att hålla reda på en samling med element. Om man använder en annan samlingsklass passar inte ovanstående sätt att traversera genom elementen. Man får använda en iterator istället (avsnitt 12.10). 196 Polygon med ArrayList, del 1 Polygon med ArrayList, del 2 public class Polygon { private ArrayList<Point> vertices; /** Skapar en polygon. */ public Polygon() { vertices = new ArrayList<Point>(); /** Definierar en ny punkt med koordinaterna x, y. */ public void addvertex(int x, int y) { vertices.add(new Point(x, y)); 197 /** Flyttar polygonen avståndet dx i x-led, dy i y-led. */ public void move(int dx, int dy) { for (int i = 0; i < vertices.size(); i++) { vertices.get(i).move(dx, dy); /** Ritar polygonen i fönstret w. */ public void draw(simplewindow w) { if (vertices.size() == 0) { return; Point start = vertices.get(0); w.moveto(start.getx(), start.gety()); for (int i = 1; i < vertices.size() ; i++) { w.lineto(vertices.get(i).getx(), vertices.get(i).gety()); w.lineto(start.getx(), start.gety()); 198

Polygon med ArrayList, del 3 ArrayList kan bara innehålla objekt /** Lägger in en ny punkt med koordinaterna x,y på plats pos. Efterföljande element flyttas */ public void insertvertex(int pos, int x, int y) { vertices.add(pos, new Point(x, y)); /** Tar bort punkten på plats pos. Efterföljande element flyttas */ public void removevertex(int pos) { vertices.remove(pos); Om man vill lagra heltal, reella tal etc. måste man använda motsvarande typklass: inte ArrayList<Integer> list = new ArrayList<Integer>(); list.add(2); ArrayList<int> list = new ArrayList<int>; 199 200 Typklasser Autoboxing - unboxing Enkla datatyper i Java motsvarande typklasser boolean Boolean int Integer double Double char Character Automatisk konvertering mellan enkel datatyp och motsvarande typklass. Exempel: Integer i = 12; // Autoboxing till Integer-objekt i = i + 1; // Unboxing av i för att beräkna i+1. // Därefter autoboxing av resultatet. ArrayList<Integer> list = ArrayList<Integer>(); list.add(12); // Autoboxing int n = list.get(0); // Unboxing 201 202

Typklassen Integer - exempel Sökoperationer på ArrayList Observera skillnaden mellan datatypen int (enkel datatyp) och Integer (klass). int a = 12; Integer b = 12; a 12 b! b är en referensvariabel som kan referera till ett Integer-objekt. 12 203 Det finns färdiga metoder för att söka i en lista: /** Söker upp ett element som matchar obj. Returnerar true om sådant element element finns, annars false. */ boolean contains(object obj); /** Söker upp ett element som matchar obj. Returnerar index för elementet, -1 om elementet inte fanns. */ int indexof(e obj); Varning: Dessa metoder förutsätter att det finns en metod public boolean equals(object obj) i klassen som ersätter E (avsnitt 12.6). Du kan alltså inte använda dessa metoder för att söka i listan om du inte sett till att det finns en korrekt equals-metod i den klass som ersätter E.! En equals-metod finns i Javas typklasser samt i klassen String.! 204 Övning sökning Algoritmexempel: insättning i sorterad följd Lägg till följande metod i klassen Polygon: /** Undersöker om polygonen har någon hörnpunkt med koordinaterna x, y. */ boolean hasvertex(int x, int y) { Ett ArrayList-objekt wordlist är deklarerad och skapad enligt följande: ArrayList<String> wordlist= new ArrayList<String>(); // Här läggs ett antal ord in i words. Orden är sorterade i stigande ordning. wordlist "apelsin" "banan" "druva" "enbär" Uppgift: Lägg till ordet word i den redan sorterade listan. 205 word "citron" 206

Insättning i sorterad följd lösning Inläsning från tangentbordet Lösning: Sök efter platsen för word, d.v.s. sök efter det första ord som är större word. Lägg in word i listan: int pos = 0; while (pos < wordlist.size() && wordlist.get(pos).compareto(word) < 0) { pos++; wordlist.add(pos, word); wordlist "apelsin" "banan" "citron" "druva" "enbär" För att läsa det användaren skriver på tangentbordet använder man ett Scanner-objekt: public class ScannerExample1 { public static void main(string[] args) { Scanner scan = new Scanner(System.in); int sum = 0; while (scan.hasnextint()) { sum = sum + scan.nextint(); System.out.println("Summa: " + sum); 207 208 Inläsning från fil try-catch-sats Man kan också koppla Scanner-objektet till en textfil: public class ScannerExample2 { public static void main(string[] args) { Scanner scan = null; try { scan = new Scanner(new File("indata.txt")); catch (FileNotFoundException e) { System.out.println("Filen kunde inte öppnas"); System.exit(1);... läs som tidigare När man försöker öppna en fil måste man använda en try-catch-sats. Man försöker öppna filen. Om det går bra fortsätter exekveringen efter try-catch-satsen. I annat fall utförs satserna i catch-blocket. try { // Här försöker vi öppna filen indata.txt scan = new Scanner(new File("indata.txt")); catch (FileNotFoundException e) { // Här kan man skriva vad som ska hända om // filen inte kan öppnas. 209 210

Utskrift på fil Delmål 2 exempel på vad du ska kunna public class PrintWriterExample { public static void main(string[] args) { PrintWriter out = null; try { out = new PrintWriter(new File("utdata.txt")); catch (FileNotFoundException e) { System.out.println("Filen kunde inte öppnas"); System.exit(1);... utskrifter med out.print hamnar på filen out.close(); Förklara följande begrepp: vektor, matris, teckensträng, generisk klass. Använda vektorer och matriser. Använda klasserna String och StringBuilder. Använda klassen ArrayList. Tillämpa algoritmen för linjärsökning. Implementera och använda klasser (större än i delmål 1). 211 212 Repetition klasser och objekt På föreläsning 12 blir det repetition inför delmålskontroll 2. Det vi ska repetera är framförallt: ArrayList! vektorer Material till denna repetitionsföreläsning delas ut separat. 213