1. ArrayListklasse

I dag skal vi utforske ArrayListklassen. Dette er den første av flere klasser kjent som samlinger . I Java er samlinger et så bredt og nyttig emne at et helt CodeGym-oppdrag er viet til dem.

For å fullt ut forstå hvordan samlinger er strukturert og alle deres nyanser, må du først lære OOP, grensesnitt, arv, det grunnleggende om multithreading og mye mer.

Så i dag skal vi bare bli kjent med den enkleste typen samling. Men på et dypt nok nivå slik at du forstår hvordan du bruker det og hvordan det fungerer. Nå da, møt ArrayListsamlingen .

Bakgrunnen

Jeg starter med litt bakgrunn. Programmerere likte virkelig ikke ett aspekt ved arrays: det faktum at størrelsen deres ikke kan endres. Hva om du trenger å lagre tre elementer til i en matrise, men det er bare én tom celle?

Den eneste løsningen på plassbegrensningene til en matrise var å lage en veldig stor matrise for å få plass til alle elementene du måtte trenge å lagre. Men dette var vanligvis bortkastet minne. Hvis en matrise vanligvis inneholdt to eller tre elementer, men det var til og med en liten sjanse for at den måtte lagre 100 av dem, var det nødvendig å lage en matrise med kapasitet til å lagre 100.

Så hva kom programmerere på? De skrev ArrayListklassen, som gjorde det samme arbeidet som Arrayklassen, men som kunne endre størrelsen.

ArrayList klasse

Navnet på ArrayListklassen er dannet av to ord: Array + List. Arrayer en matrise og Lister en liste.

Hvert ArrayListobjekt inneholder en vanlig rekke elementer. Når du leser elementer fra en ArrayList, henter objektet dem fra sin interne matrise. Når du skriver elementer, skriver den dem til den interne matrisen.

ArrayList-klassen mangler alle ulempene som arrays har. Den vet hvordan:

  • Lagre elementer av en bestemt type
  • Endre størrelsen på listen dynamisk
  • Legg til elementer på slutten av listen
  • Sett inn elementer i begynnelsen eller midten av listen
  • Fjern elementer fra hvor som helst i listen

For mer informasjon, se nedenfor:


2. Opprette et ArrayListobjekt

For å lage et ArrayListobjekt, må du skrive kode slik:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Hvor ArrayLister samlingstypen/-klassen, TypeParameterer typen av elementene som er lagret i ArrayListsamlingen, og nameer navnet på en ArrayList<TypeParameter>variabel.

Variabelen namehar en generisk type. Den består av to typer: samlingens type angis først, og deretter brukes vinkelparenteser for å indikere typen av elementene som er lagret i samlingen.

Eksempler:

Kode Beskrivelse
ArrayList<Integer> list = new ArrayList<Integer>();
Liste over heltall
ArrayList<String> list = new ArrayList<String>();
Liste over strenger
ArrayList<Double> list = new ArrayList<Double>();
Liste over reelle tall

I motsetning til matriser kan ikke samlinger lagre primitive typer, bare referansetyper . Så hvis du trenger en samling av ints, bruk Integerwrapper-klassen i stedet.


3. Operasjoner med enArrayList

I utgangspunktet er lengden på den nyopprettede listen null, siden den inneholder 0 elementer. Hvis du legger til ett element i listen, øker lengden med 1. Hvis du fjerner det tilføyde elementet, reduseres lengden tilbake til null.

Følgende tabell kan lære deg mer om metodene i ArrayListklassen:

Metoder Beskrivelse
void add(Type value)
Legger det beståtte elementet til listen
void add(int index, Type value)
Legger til et element til en bestemt plassering i listen.
Type get(int index)
Returnerer elementet hvis indeks erindex
void set(int index, Type value)
Tilordner valuetil elementet hvis indeks erindex
Type remove(int index)
Fjerner elementet hvis indeks er index. Returnerer det fjernede elementet.
Type remove(Type value)
Fjerner elementet du sender til metoden. Hvis det er mer enn ett slikt element, vil det første bli fjernet.
void clear()
Tømmer listen, dvs. fjerner alle elementer fra listen.
boolean contains(Type value)
Sjekker om listen inneholder value.
boolean isEmpty()
Sjekker om listen er tom eller ikke. Med andre ord, om lengden på listen er null.
int size()
Returnerer størrelsen på listen, dvs. antall elementer i listen.
Type[] toArray(Type[] array)
Returnerer en matrise som inneholder elementene i listen.
Du må sende arrayet til metoden.

Disse metodene lar deg gjøre nesten alt du måtte ønske med listen: bytte elementer, legge til elementer og fjerne elementer. Du kan tømme listen med en enkelt kommando, eller til og med konvertere listen til en matrise.



4. Sammenligning av ArrayListogArray

Jeg tror ikke vi kan unngå å sammenligne ArrayListog en rekke.

Det er bare 4 handlinger du kan utføre med matriser:

  • Lag en matrise
  • Få et element etter indeks
  • Sett et element etter indeks
  • Få lengden på matrisen

Her er disse operasjonene som de gjelder for en matrise og en ArrayList:

Array ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

La oss sammenligne hvordan en ArrayListfungerer mot hvordan en matrise fungerer. La oss for eksempel implementere denne oppgaven: "les 10 strenger fra tastaturet og vis dem på skjermen i omvendt rekkefølge"

Bruker Array Bruker ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Analogien er klar. Alt er på en eller annen måte kortere og klarere for arrays. Men ArrayLister ikke vanskelig heller: for å få et element bruker vi get()metoden; å endre et element, set()metoden; for å få lengden på listen, metoden size().

Så hvorfor bruker programmerere ArrayListklassen?

Hele poenget er selvfølgelig alle de andre metodene som vanlige arrays ikke har:

  • Legg til et element i listen
  • Legg til et element i midten av listen
  • Finn et element i listen
  • Fjerne et element fra en liste