Klassen ArrayList
Inledning
Arrayer har följande egenskaper:- Består av ett antal element.
- Alla element är av samma typ.
- För att komma åt enskilda element används ett index.
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 2toString 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:
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...)
Anmärkning 1: Det går att skriva
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
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
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.