"Här är jag."

"Hej Ellie!"

"Idag ska vi prata om ett intressant ämne. Jag ska berätta om ArrayList -klassen."

"En ny klass? Coolt! Vad kan den göra?"

"Låt mig börja med baksidan. Det enda programmerare ogillar med arrayer är att du inte kan ändra deras storlek. Vad gör du om du behöver lägga till ytterligare tre element till en array som bara har en ledig plats? "

"Den enda lösningen på detta problem är att skapa mycket stora arrayer, för att garantera att du har tillräckligt med utrymme för alla element. Detta innebär dock ofta bortkastat minne. Om en array vanligtvis innehåller tre element, men det finns även den minsta chansen att den kan behöva rymma 100 element måste du skapa en array med 100 element."

"Så, vad kom programmerare på?"

"De skrev ArrayList- klassen, som gör samma sak som en Array, men den kan ändra sin storlek."

"Intressant drag. Hur gjorde de det?"

"Varje ArrayList -objekt lagrar en vanlig array av element. När du läser element från en ArrayList läser den dem från dess inre array. När du skriver dem till ArrayList , skriver den dem till sin inre array. Här, jämför dessa kolumner:"

Array ArrayList
Skapa en behållare för element
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Få antalet element
int n = list.length;
int n = list.size();
Hämta ett element från en array/samling
String s = list[3];
String s = list.get(3);
Skriv ett element i en array
list[3] = s;
list.set(3, s);

"Så varför är ArrayList bättre? Såvitt jag kan säga är koden längre."

"För det första stöder ArrayList flera ytterligare operationer som programmerare måste utföra hela tiden. En vanlig array stöder inte dessa operationer. Till exempel att infoga eller ta bort element från mitten av en array utan att lämna hål. "

"För det andra, möjligheten att ändra storleken på arrayen. När du behöver lägga till ytterligare ett element men den interna arrayen inte har några lediga platser, här är vad som händer i ArrayList :

a) En annan array skapas som är 50 % större än den nuvarande inre arrayen, plus ett element.

b) Alla element från den gamla arrayen kopieras till den nya.

c) Den nya arrayen sparas som ArrayList-objektets inre array. Den gamla arrayen är deklarerad som skräp (vi slutar helt enkelt att lagra en referens till den)."

Array ArrayList
Lägg till ett element i slutet av arrayen
Denna åtgärd stöds inte
list.add(s);
Lägg till ett element i mitten av arrayen
Denna åtgärd stöds inte
list.add(15, s);
Lägg till ett element i början av arrayen
Denna åtgärd stöds inte
list.add(0, s);
Ta bort ett element från arrayen
Vi skulle kunna ta bort ett element med list[3] = null. Men detta skulle lämna ett "hål" i arrayen.
list.remove(3);
2
Uppgift
Java Syntax,  nivålektion
Låst
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and earn a little dark matter. What's more, you combat laziness.

"Hur arbetar vi med denna ArrayList?"

"Faktiskt, precis som vi gör med en vanlig array. Titta. Låt oss jämföra att arbeta med en ArrayList med att arbeta med en array. Anta att vi behöver "läsa in 10 strängar och visa dem på skärmen i omvänd ordning" .

"Titta på det här:

Med en array
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) );
}
}

Jag har använt samma färg för att markera liknande åtgärder i varje kolumn."

"Å ena sidan är allt annorlunda. Å andra sidan är det fortfarande samma."

"Rätt. Förutom att vi inte använder hakparenteser när vi arbetar med en ArrayList . Istället använder vi get , set och add -metoder."

"Ja, jag samlade så mycket. Ändå ser det väldigt likadant ut."