"Her er jeg."

"Hej, Ellie!"

"I dag skal vi tale om et interessant emne. Jeg vil fortælle dig om ArrayList- klassen."

"En ny klasse? Fedt! Hvad kan den?"

"Lad mig starte med baghistorien. Det eneste, programmører ikke kan lide ved arrays, er, at du ikke kan ændre deres størrelse. Hvad gør du, hvis du har brug for at tilføje tre elementer mere til et array, der kun har én ledig plads? "

"Den eneste løsning på dette problem er at skabe meget store arrays, for at sikre, at du har plads nok til alle elementerne. Dette betyder dog ofte spildt hukommelse. Hvis et array normalt indeholder tre elementer, men der er selv den mindste chance at det muligvis skal rumme 100 elementer, skal du oprette et array med 100 elementer."

"Så hvad fandt programmører på?"

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

"Interessant træk. Hvordan gjorde de det?"

"Hvert ArrayList- objekt gemmer et regulært array af elementer. Når du læser elementer fra en ArrayList , læser det dem fra dets indre array. Når du skriver dem til ArrayList , skriver det dem til dets indre array. Her kan du sammenligne disse kolonner:"

Array ArrayList
Opret en beholder til elementer
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Få antallet af elementer
int n = list.length;
int n = list.size();
Hent et element fra en matrix/samling
String s = list[3];
String s = list.get(3);
Skriv et element ind i et array
list[3] = s;
list.set(3, s);

"Så hvorfor er ArrayList bedre? Så vidt jeg kan se, er koden nu længere."

"For det første understøtter ArrayList adskillige yderligere operationer, som programmører skal udføre hele tiden. Et almindeligt array understøtter ikke disse operationer. For eksempel indsættelse eller sletning af elementer fra midten af ​​et array uden at efterlade huller. "

"For det andet, muligheden for at ændre størrelsen af ​​arrayet. Når du har brug for at tilføje et element mere, men det interne array ikke har nogen ledige slots, er her, hvad der sker inde i ArrayList :

a) Der oprettes et andet array, der er 50 % større end det nuværende indre array, plus et element.

b) Alle elementer fra det gamle array kopieres til det nye.

c) Det nye array gemmes som ArrayList-objektets indre array. Det gamle array er erklæret skrald (vi stopper simpelthen med at gemme en reference til det)."

Array ArrayList
Tilføj et element i slutningen af ​​arrayet
Denne handling er ikke understøttet
list.add(s);
Tilføj et element i midten af ​​arrayet
Denne handling er ikke understøttet
list.add(15, s);
Tilføj et element i begyndelsen af ​​arrayet
Denne handling er ikke understøttet
list.add(0, s);
Slet et element fra arrayet
Vi kunne slette et element med list[3] = null. Men dette ville efterlade et 'hul' i arrayet.
list.remove(3);
2
Opgave
Java Syntax,  niveaulektie
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.

"Hvordan arbejder vi med denne ArrayList?"

"Faktisk, ligesom vi gør med et almindeligt array. Se. Lad os sammenligne arbejde med en ArrayList med at arbejde med en array. Antag, at vi skal 'læse 10 strenge ind og vise dem på skærmen i omvendt rækkefølge '."

"Se det her:

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

Jeg har brugt den samme farve til at fremhæve lignende handlinger i hver kolonne."

"På den ene side er alt anderledes. På den anden side er det stadig det samme."

"Godt. Bortset fra at vi ikke bruger firkantede parenteser, når vi arbejder med en ArrayList . I stedet bruger vi get , set og add -metoder."

"Ja, jeg samlede så meget. Alligevel ser det meget ens ud."