"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 | |
|
|
Få antalet element | |
|
|
Hämta ett element från en array/samling | |
|
|
Skriv ett element i en array | |
|
|
"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 |
|
Lägg till ett element i mitten av arrayen | |
Denna åtgärd stöds inte |
|
Lägg till ett element i början av arrayen | |
Denna åtgärd stöds inte |
|
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. |
|
"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:
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] );
}
}
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);
// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();
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."
GO TO FULL VERSION