1. ArrayListklasse

I dag skal vi udforske ArrayListklassen. Dette er den første af flere klasser kendt som samlinger . I Java er samlinger et så bredt og nyttigt emne, at en hel CodeGym-quest er afsat til dem.

For fuldt ud at forstå, hvordan samlinger er struktureret og alle deres nuancer, skal du først lære OOP, grænseflader, arv, det grundlæggende i multithreading og meget mere.

Så i dag skal vi lige stifte bekendtskab med den enkleste form for samling. Men på et dybt nok niveau, så du forstår, hvordan du bruger det, og hvordan det virker. Mød nu ArrayListsamlingen .

Baghistorien

Jeg starter med lidt baggrund. Programmører kunne virkelig ikke lide ét aspekt af arrays: det faktum, at deres størrelse ikke kan ændres. Hvad hvis du har brug for at gemme tre elementer mere i et array, men der kun er én tom celle?

Den eneste løsning på pladsbegrænsningerne for et array var at skabe et meget stort array for at kunne rumme alle de elementer, du måtte have brug for at gemme. Men dette var normalt spild af hukommelse. Hvis et array normalt indeholdt to eller tre elementer, men der var endda en lille chance for, at det skulle gemme 100 af dem, så var det nødvendigt at oprette et array med kapacitet til at gemme 100.

Så hvad fandt programmører på? De skrev ArrayListklassen, som udførte det samme arbejde som Arrayklassen, men der kunne ændres størrelse.

ArrayList klasse

Klassens navn ArrayLister dannet af to ord: Array + List. Arrayer en matrix og Lister en liste.

Hvert ArrayListobjekt indeholder et almindeligt array af elementer. Når du læser elementer fra en ArrayList, henter objektet dem fra dets interne array. Når du skriver elementer, skriver den dem til det interne array.

ArrayList-klassen mangler alle de ulemper, som arrays har. Den ved hvordan man:

  • Gem elementer af en bestemt type
  • Ændr dynamisk størrelsen på listen
  • Tilføj elementer til slutningen af ​​listen
  • Indsæt elementer i begyndelsen eller midten af ​​listen
  • Fjern elementer fra et hvilket som helst sted på listen

For flere detaljer, se nedenfor:


2. Oprettelse af et ArrayListobjekt

For at oprette et ArrayListobjekt skal du skrive kode som denne:

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

Hvor ArrayLister samlingstypen/-klassen, TypeParameterer typen af ​​de elementer, der er gemt i ArrayListsamlingen, og nameer navnet på en ArrayList<TypeParameter>variabel.

Variablen namehar en generisk type. Den består af to typer: samlingens type angives først, og derefter bruges vinkelparenteser til at angive typen af ​​de elementer, der er gemt i samlingen.

Eksempler:

Kode Beskrivelse
ArrayList<Integer> list = new ArrayList<Integer>();
Liste over heltal
ArrayList<String> list = new ArrayList<String>();
Liste over strenge
ArrayList<Double> list = new ArrayList<Double>();
Liste over reelle tal

I modsætning til arrays kan samlinger ikke gemme primitive typer, kun referencetyper . Så hvis du har brug for en samling af ints, så brug Integerindpakningsklassen i stedet.


3. Operationer med enArrayList

Til at begynde med er længden af ​​den nyoprettede liste nul, da den indeholder 0 elementer. Hvis du tilføjer et element til listen, øges dets længde med 1. Hvis du fjerner det tilføjede element, falder længden tilbage til nul.

Følgende tabel kan lære dig mere om klassens metoder ArrayList:

Metoder Beskrivelse
void add(Type value)
Tilføjer det beståede element til listen
void add(int index, Type value)
Tilføjer et element til en bestemt placering på listen.
Type get(int index)
Returnerer det element, hvis indeks erindex
void set(int index, Type value)
Tildeler valuetil det element, hvis indeks erindex
Type remove(int index)
Fjerner det element, hvis indeks er index. Returnerer det fjernede element.
Type remove(Type value)
Fjerner det element, du overfører til metoden. Hvis der er mere end ét sådant element, vil det første blive fjernet.
void clear()
Rydder listen, dvs. fjerner alle elementer fra listen.
boolean contains(Type value)
Kontrollerer om listen indeholder value.
boolean isEmpty()
Kontrollerer, om listen er tom eller ej. Med andre ord, om længden af ​​listen er nul.
int size()
Returnerer størrelsen på listen, dvs. antallet af elementer på listen.
Type[] toArray(Type[] array)
Returnerer en matrix, der indeholder elementerne i listen.
Du skal videregive arrayet til metoden.

Disse metoder lader dig gøre næsten alt, hvad du måtte ønske med listen: bytte elementer, tilføje elementer og fjerne elementer. Du kan rydde listen med en enkelt kommando eller endda konvertere listen til en matrix.



4. Sammenligning af ArrayListogArray

Jeg tror ikke, vi kan undgå at sammenligne ArrayListog en række.

Der er kun 4 handlinger, du kan udføre med arrays:

  • Opret et array
  • Få et element efter indeks
  • Indstil et element efter indeks
  • Få længden af ​​arrayet

Her er disse operationer, som de gælder for en matrix 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();

Lad os sammenligne, hvordan en ArrayListfungerer versus, hvordan en matrix fungerer. Lad os for eksempel implementere denne opgave: "læs 10 strenge fra tastaturet og vis dem på skærmen i omvendt rækkefølge"

Brug af Array Brug af 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 anden måde kortere og klarere for arrays. Men det ArrayLister heller ikke svært: For at få et element bruger vi metoden get(); at ændre et element, set()metoden; for at få listens længde, metoden size().

Så hvorfor bruger programmører klassen ArrayList?

Hele pointen er selvfølgelig alle de andre metoder, som almindelige arrays ikke har:

  • Tilføj et element til listen
  • Tilføj et element til midten af ​​listen
  • Find et element på listen
  • Fjernelse af et element fra en liste