Klassen ArrayList

Inledning

Arrayer har följande egenskaper:

Arrayer implementeras vanligtvis i en sammanhängande minnesarea. Eftersom alla element är av samma typ och således tar lika stor plats så går lätt (för "systemet") att hitta ett enskilt element om man vet dess index.

En nackdel med arrayer är att när de är skapade så har det en viss storlek som inte går att ändra. Om man från början inte vet hur många platser man behöver måsta man antingen ta i med en storlek som säkert räcker eller, vid behov, skaffa en ny, större array och flytta över innehållet till den nya arrayen. Java (liksom de flesta andra moderna programmeringsspråk) tillhandahåller några alternativ som automatiskt sköter utvidgningen. Här skall vi demonstrera alternativet ArrayList.

Klassen ArrayList

Objekt ut klassen ArrayList representerar ett antal element av samma typ precis som vanliga arrayer. Man kan också använda ett index för att komma åt enskilda element men syntaxen är annorlunda. Även syntaxen för att deklarera är annorlunda. En fördelen med denna klass är att man inte behöver veta hur många element man skall lagra när man skapar ett objekt utan den kan växa och efter behov. Man kan också stoppa in nya element och ta bort existerande element var som helst.

Exempel:

import java.util.ArrayList; Klassen som finns i paketet util måste importeras.
public class ArrayListDemo { public static void main(String[] args) {
ArrayList<String> nameList = new ArrayList<String>(); Konstruktor med typangivelse.
nameList.add("Olle"); // At index 0 nameList.add("Lisa"); // At index 1 nameList.add("Lasse"); // At index 2 add lägger till sist.
for (int i= 0; i<nameList.size(); i++) { System.out.print(nameList.get(i) + " "); } System.out.println(); size() returnerar aktuellt antal element.
get(i) returnerar element i position i.
nameList.add(1, "Anna"); System.out.println(nameList.toString()); add(1, ...) skjuter in på plats 1
toString()-metoden för ArrayList.
nameList.set(2, "Britta"); System.out.println(nameList); set(2...) ändrar på plats 2
toString används implicit
nameList.remove(0); System.out.println(nameList); Tar bort element på plats 0.
Alla element med högre index flyttas ett steg.
nameList.remove("Britta"); System.out.println(nameList); Tar bort elementet med visst innehåll.
} }

När detta program körs produceras följande rader som output:

Olle Lisa Lasse [Olle, Anna, Lisa, Lasse] [Olle, Anna, Britta, Lasse] [Anna, Britta, Lasse] [Anna, Lasse]

Till skillnad från arrayer kan man inte lagra primitiva typer (int, double, ...) i dessa listor. Om man vill lagra t ex heltal i lista så får man använda sig av omslagsklassen Integer.

Exempel: Följande kod lagrar kvadraterna på talen 0 till 99 i en ArrayList och skriver sedan ut dem (av någon anledning...)

ArrayList<Integer> alist = new ArrayList<Integer>(); for (int i = 0; i<100; i++) { alist.add(new Integer(i*i)); } for (int i = 0; i<l.size(); i++) { System.out.println((alist.get(i)).intValue()); }

Anmärkning 1: Det går att skriva

list.add(i*i);

eftersom Java automatiskt kommer att skapa ett motsvarande Integer-objekt genom så kallad autoboxing. På samma sätt gå det går också att skriva

System.out.println(alist.get(i));

på grund av så kallad autounboxing.

Anmärkning 2: Det går utmärkt att använda "for-each-satsen".
Exempel: Gå igenom alla elementen i arraylistan alist ovan

for (Integer x : alist) { System.out.println(x); // or whatever you want to do }

Anmärkning 3: Ett naturligt sätt att gå igenom elementen i en ArrayList är att använda en iterator. Vi tar dock inte upp det begreppet i denna kurs.


Tillbaka

Valid CSS!