"Her er jeg."

"Hei, Ellie!"

"I dag skal vi snakke om et interessant emne. Jeg skal fortelle deg om ArrayList -klassen."

"En ny klasse? Kult! Hva kan det gjøre?"

"La meg starte med bakhistorien. Det eneste programmerere misliker med arrays er at du ikke kan endre størrelsen deres. Hva gjør du hvis du trenger å legge til tre elementer til i en array som bare har én ledig plass? "

"Den eneste løsningen på dette problemet er å lage veldig store arrays, for å garantere at du har nok plass til alle elementene. Dette betyr imidlertid ofte bortkastet minne. Hvis en array vanligvis inneholder tre elementer, men det er til og med den minste sjansen at den kanskje trenger å romme 100 elementer, må du lage en 100-elements array."

"Så, hva kom programmerere på?"

"De skrev ArrayList- klassen, som gjør det samme som en Array, men den kan endre størrelsen."

"Interessant trekk. Hvordan gjorde de det?"

"Hvert ArrayList- objekt lagrer en vanlig array av elementer. Når du leser elementer fra en ArrayList , leser den dem fra dens indre array. Når du skriver dem til ArrayList , skriver den dem til dens indre array. Her kan du sammenligne disse kolonnene:"

Array ArrayList
Lag en beholder for elementer
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Få antall elementer
int n = list.length;
int n = list.size();
Få et element fra en matrise/samling
String s = list[3];
String s = list.get(3);
Skriv et element inn i en matrise
list[3] = s;
list.set(3, s);

"Så hvorfor er ArrayList bedre? Så vidt jeg kan se, er koden nå lengre."

"For det første støtter ArrayList flere tilleggsoperasjoner som programmerere må utføre hele tiden. En vanlig array støtter ikke disse operasjonene. For eksempel å sette inn eller slette elementer fra midten av en array uten å etterlate hull. "

"For det andre, muligheten til å endre størrelsen på arrayen. Når du trenger å legge til ett element til, men den interne arrayen ikke har noen ledige spor, er dette hva som skjer inne i ArrayList :

a) En annen array er opprettet som er 50 % større enn gjeldende indre array, pluss ett element.

b) Alle elementer fra den gamle matrisen kopieres til den nye.

c) Den nye matrisen lagres som ArrayList-objektets indre matrise. Den gamle matrisen er erklært som søppel (vi slutter ganske enkelt å lagre en referanse til den)."

Array ArrayList
Legg til et element på slutten av matrisen
Denne handlingen støttes ikke
list.add(s);
Legg til et element i midten av matrisen
Denne handlingen støttes ikke
list.add(15, s);
Legg til et element i begynnelsen av matrisen
Denne handlingen støttes ikke
list.add(0, s);
Slett et element fra matrisen
Vi kan slette et element med list[3] = null. Men dette ville etterlate et "hull" i matrisen.
list.remove(3);

"Hvordan jobber vi med denne ArrayList?"

"Egentlig, akkurat som vi gjør med en vanlig matrise. Se. La oss sammenligne arbeid med en ArrayList med å jobbe med en matrise. Anta at vi må 'lese inn 10 strenger og vise dem på skjermen i omvendt rekkefølge '."

"Se på dette:

Med en rekke
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Med en ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

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

Jeg har brukt samme farge for å fremheve lignende handlinger i hver kolonne."

"På den ene siden er alt annerledes. På den andre siden er det fortsatt det samme."

"Riktig. Bortsett fra at vi ikke bruker firkantede parenteser når vi jobber med en ArrayList . I stedet bruker vi get , set og add -metoder."

"Ja, jeg samlet så mye. Likevel ser det veldig likt ut."