• No results found

Föreläsning 12 LISTOR I JAVA: KLASSEN ARRAYLIST

N/A
N/A
Protected

Academic year: 2022

Share "Föreläsning 12 LISTOR I JAVA: KLASSEN ARRAYLIST"

Copied!
17
0
0

Loading.... (view fulltext now)

Full text

(1)

Föreläsning 12

LISTOR I JAVA: KLASSEN ARRAYLIST

(2)

Saker du ska kunna

✓ Ta bort element från en vektor

– Både sorterad och osorterad

✓ Söka upp element i en vektor

– Linjärsökning räcker (jag har även visat binärsökning)

✓ Registrering

– (dvs. att använda en vektor för att räkna förekomster av olika slag)

✓ Sortering

– Jag har visat urvalssortering och bubbelsortering

Sätta in element i ordnad följd

(3)

Vektorer med objekt

Point[] vertices = new Point[3];

vertices[0] = new Point(10,10);

vertices[1] = new Point(50,10);

vertices[2] = new Point(30,40);

[0]

vertices

[1] [2]

x 30 y 40 x 50

y 10 x 10

y 10

(4)

Exempel: hantera alla punkterna

Vektorn vertices innehåller tre punkter, som utgör hörnen i en triangel. För att flytta punkterna i vektorn:

for (int i = 0; i < vertices.length; i++) { vertices[i].move(10, 20);

}

Rita triangeln:

SimpleWindow w = new SimpleWindow(600, 600, "Triangle");

w.moveTo(vertices[0].getX(), vertices[0].getY());

for (int i = 1; i < vertices.length; i++) {

w.lineTo(vertices[i].getX(), vertices[i].getY());

}

w.lineTo(vertices[0].getX(), vertices[0].getY());

(5)

Vektor för att representera en polygon

Antag att vi vill hantera polygoner med ett godtyckligt antal hörnpunkter. Då får vi gissa hur stor vektor vi behöver för punkterna:

Det behövs också en variabel som håller reda på hur många punkter vi satt in i vektorn:

null null null

0 1 2 3 4 5 6 7

n 4

vertices null

x y

50 50

x y

70 300

x y

350 350

x y

320 200

(6)

Vektorernas begränsningar

På föreläsning 9 valde vi ett maximalt antal punkter i polygonen.

Hur väljer man ett sådant värde?

• Om man gör vektorn för liten från början kan inte alla polygoner representeras (t ex en 40-hörning).

• Om man gör vektorn stor från början (säg, 1000 element) blir många element oanvända (t ex 997 st för en triangel). Då slösar vi med minne.

Ibland är det inte praktiskt möjligt att

ange ett maximalt antal element på förhand!

(7)

Exempel: klassen Polygon

Se veckans filmer (Listor, del 1–2)

(8)

Vektorernas begränsningar (forts.)

Vi kunde här utöka metoden addVertex så att en ny, större vektor skapas vid behov...

• ...men det blir en del att skriva.

• Måste göras igen om vi vill ha en annan, dynamiskt växande, lista. (T.ex. en lista av Turtle, eller heltal.)

Det vore smidigt med en datastruktur...

... som inte kräver att vi känner antalet element från början ... där vi enkelt kan lägga in eller ta bort element

... som kan hantera element av olika slag (precis som vektorer)

(9)

ArrayList

ArrayList:

• är en standardklass i Java (paketet java.util).

• innehåller alltid objektreferenser (inte int, double, ... ).

• har en typparameter som anger elementens typ.

• lagrar internt sina element i en vektor.

• utökar vektorns storlek vid behov.

• har färdiga metoder för att sätta in och ta bort element.

(10)

Viktiga operationer på ArrayList (urval)

/** Skapar en ny lista */

ArrayList<E>();

/** Tar reda på elementet på plats pos */

E get(int pos);

/** Lägger in objektet obj sist */

void add(E obj);

/** Lägger in obj på plats pos; efterföljande flyttas */

void add(int pos, E obj);

/** Tar bort elementet på plats pos och returnerar det */

E remove(int pos);

/** Tar reda på antalet element i listan */

int size();

ArrayList<E>

(11)

ArrayList är en generisk klass

ArrayList är en generisk klass och kan innehålla objekt av godtycklig typ. E är en typparameter till klassen. (Mer om

detta i EDAA01 Programmeringsteknik – fördjupningskurs.)

-> Ersätt E med typen på de objekt som lagras i listan.

Exempel där vi skapar en lista av Point-objekt och sätter in tre sådana 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));

(12)

Polygon med ArrayList

Vi kan använda ArrayList för att implementera Polygon på ett rättframt sätt.

Se veckans filmer (Listor, del 3)

(13)

Att traversera listor

(dvs göra något med listans alla element)

Anta att vi vill gå igenom en lista (t.ex. för att göra något med alla element). Då kan vi använda for på två sätt:

• Som tidigare, med hjälp av ArrayLists metoder för att få ut element och storlek, samt en vanlig for-sats.

• for-each-loopen ("the enhanced for loop”), som är särskilt anpassad för datastrukturer som ArrayList.

(14)

Skriv ut alla element: med "vanlig" for-loop

for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));

}

(15)

Traversera med en fräsigare for-sats (kallas ibland ”for-each”)

Antag att vi har följande lista:

ArrayList<String> words = new ArrayList<String>();

Då kan vi skriva ut alla element i listan så här:

for (String s : words) { // (1) System.out.println(s);

}

For-satsen (1) ovan kan läsas som

”för varje sträng s i listan words, gör följande”

(Sådana for-satser kan även användas för vektorer, men då tas ingen hänsyn till hur många vektorelement vi verkligen använder (jämför attributet n i Polygon-exemplet). Därför används sådana for-satser mer sällan med vektorer.)

(16)

Polygon med ArrayList

Vi kan använda for-each för att gå igenom elementen i vår Polygon på ett enkelt sätt.

Se veckans filmer (Mer om listor: for-each)

(17)

References

Related documents

När man redan kan skriva ner alla element i listan (speciellt när de inte följer en enkel regel) är det enklast att räkna upp elementen. I det givna exemplet hade det varit lättare

Hennes svar kan förstås inte sägas gälla för alla porrskådisar, vilket hon själv också indirekt påpekar (se avsnitt 7.2, exempel 11 och 16), men det ger ändå ett hum om

Detta gäller dock inte alla branscher, hotell- och restaurang uppger i högre grad en negativ utveckling i den här enkätomgången än i den förra (80 procent jämfört med 70

Om möjligt redovisas resultat för båda mätperioderna... Företagets huvudsakliga verksamhet/branschtillhörighet

Hur stor risk tror du det finns att företaget kommer att varsla/säga upp personal inom de närmaste 6 månaderna på grund av

Använda befintliga projekt som vi håller på med för att höja attraktionen för våra sex kommuner och regionen. Skapa en kommunikationsstrategi

Växtslag Sortförslag (favoritsorter står först i uppräkningen)

Läroplanen för förskolan (Skolverket, 1998) säger inte mycket om hur den fysiska miljön skall se ut mer än att den skall vara ändamålsenlig och att barnen skall ges möjligheter