"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 | |
|
|
Få antall elementer | |
|
|
Få et element fra en matrise/samling | |
|
|
Skriv et element inn i en matrise | |
|
|
"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 |
|
Legg til et element i midten av matrisen | |
Denne handlingen støttes ikke |
|
Legg til et element i begynnelsen av matrisen | |
Denne handlingen støttes ikke |
|
Slett et element fra matrisen | |
Vi kan slette et element med list[3] = null . Men dette ville etterlate et "hull" i matrisen. |
|
"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:
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) );
}
}
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."
GO TO FULL VERSION