"Amigo, jeg håber, at du nu har indset, hvor nyttige arrays er i programmering?"
"Helt klart, Rishi! Jeg har allerede løst mere end én opgave."
"Har dine opgaver haft gentagne handlinger? Den slags, som du har gjort igen og igen."
"Hvis jeg har forstået dig rigtigt, mener du lignende handlinger i forskellige opgaver? For eksempel ved at bruge en loop overalt til at vise indholdet af et array - det er jeg så træt af at gøre!"
"Ja, det er det, jeg mener. Javas skabere bemærkede, at Java-programmører ofte skriver den samme kode, når de arbejder med arrays. For eksempel kode for at kopiere en del af et array til et andet array eller kode til at fylde hver celle i et array med det samme. eller dit eksempel: kode til at vise indholdet af et array i en læsbar form på skærmen.
"Og rigtige programmører har én meget vigtig regel: Lad være med at gentage dig selv. Du er enig i, at det er forkert at udføre overflødigt arbejde - du får ikke betalt for det. Effektivt arbejde er godt betalt, tro mig. I øvrigt er en nybegynders kode er umiddelbart genkendelig på den store mængde gentagne kode.
"Javas skabere overvejede dette og skabte specialklassen Arrays
(den fulde navn er java.util.Arrays
), og satte de mest populære array-relaterede handlinger ind i den."
"Hmm... Meget interessant. Så hvad har den præcist?
"Den har en masse metoder til enhver lejlighed, men først vil vi overveje kun 10 af dem - de enkleste og mest brugte.
Arrays.toString()
"Den første metode, vi vil se på, er Arrays.toString()
... Men først lidt baggrund.
"Hvert array i Java har en toString()
metode, som returnerer en 'tekstlig repræsentation af arrayet'. Du kan få en tekstlig repræsentation af et array ved at bruge følgende sætning:
String str = name.toString();
"Hvor name
er navnet på array-variablen, og str
er navnet på den variabel, der gemmer strengrepræsentationen af arrayet. Amigo, har du prøvet at udskrive et array til skærmen ved hjælp af metoden ?System.out.println(name)
Jeg indrømmer, det skete. Jeg så noget volapyk. Jeg besluttede at holde mig ude af skade og fortsætte med at bruge loops.
"Sandsynligvis har du set noget som:
I@37afeb11
"Det første bogstav I
betyder, at det er et int
array, og symbolerne efter @
er adressen på et enkelt objekt i hukommelsen. Man kan tænke på det som arrayets adresse i hukommelsen. På den ene side er det netop den information, der er gemt i hukommelsen. array-variabel, men på den anden side forventede du noget andet, ikke?"
"Nøjagtigt! Jeg havde planer om at se værdierne i arrayet. Dette var det sidste, jeg forventede."
"Og det er præcis derfor, de fandt frem til Arrays.toString()
metoden - at vise værdierne af et array. Vi kalder det sådan her:
String str = Arrays.toString(name);
Eksempler:
|
Variablen str vil indeholde strengen"[1, 2, 3]" |
|
Variablen str vil indeholde strengen"[]" |
|
Variablen str vil indeholde strengen"[Hi, How's, life?]" |
Arrays.deepToString()
"Metoden er dog toString()
ikke tilstrækkelig, når det kommer til todimensionelle arrays. Med andre ord, hvis du prøver at kalde Arrays.toString()
, vil du se noget velkendt:
[I@37afeb11, I@37afeb21, I@37afeb31]
"Det er alt sammen, fordi cellerne i et todimensionelt array gemmer referencer til endimensionelle arrays. Og hvordan konverteres endimensionelle arrays til en streng? Præcis som du ser ovenfor.
"Hvad skal man så gøre? Hvordan viser vi et todimensionelt array korrekt?"
"Javas skabere forudså dette også. Til dette formål Arrays
har klassen en anden speciel metode - deepToString()
. Kaldet ser sådan ud:
String str = Arrays.deepToString(name);
"Denne metode kan bestå arrays, der er todimensionelle, endimensionelle, tredimensionelle eller generelt en hvilken som helst dimension, og den vil altid vise elementerne i arrayet.
Eksempler:
|
Variablen str vil indeholde strengen"[1, 2, 3]" |
|
Variablen str vil indeholde strengen"[[1, 1], [2, 2], [3, 3]]" |
|
Variablen str vil indeholde strengen"[[[1, 2, 3], [1]], [[]]]" |
Arrays.equals()
"Vi fandt ud af, hvordan vi viser arrays på skærmen. Hvad med at sammenligne arrays? Kan du huske, hvilke metoder vi kan bruge til at sammenligne strenge?"
"Jeg plejer at bruge equals
metoden!
"Ja, equals
, og også equalsIgnoreCase
(som sammenligner strenge uden hensyn til store og små bogstaver).
"Gode nyheder: du kan også bruge equals
metoden til arrays. Dårlige nyheder: den sammenligner ikke indholdet af arrays. Metoden equals
med arrays gør det samme som ==
operatoren - den sammenligner referencer.
Eksempler:
|
false (referencerne er ikke ens) |
|
Metoden equals til arrays ganske enkelt at sammenligne referencerne for to arrays. false (referencerne er ikke ens) |
"Så hvad gør vi? Hvordan sammenligner vi arrays baseret på deres indhold?"
"Igen Arrays
kommer klassen os til undsætning. Mere specifikt dens Arrays.equals()
metode. Sådan kalder vi det:
Arrays.equals(name1, name2)
"Metoden returnerer, true
hvis arrays er lige lange, og deres elementer er ens. Ellers returnerer den false
.
Eksempler:
|
Metoden equals til arrays ganske enkelt at sammenligne referencerne for to arrays. false (referencerne er ikke ens) |
|
true (indholdet er lige meget) |
|
false (indholdet af arrays er forskelligt) |
Arrays.deepEquals()
"Og, som du sikkert allerede har gættet, Arrays.equals
vil metoden ikke fungere korrekt for to-dimensionelle arrays: den behandler to-dimensionelle arrays som en en-dimensional array, hvis elementer er adresser til en-dimensionelle arrays.
"For at sammenligne multidimensionelle arrays korrekt ( n = 1, 2, 3,...
), fandt de frem til Arrays.deepEquals()
metoden. Kaldet ser sådan ud:
Arrays.deepEquals(name1, name2)
"Metoden returnerer true
, hvis arrays er lige lange, og deres elementer er ens. Ellers returnerer denfalse
. Hvis elementerne inde i arrayet også er arrays, så Arrays.deepEquals()
bruges metoden til at sammenligne dem, og så videre.
Eksempler:
|
Metoden equals til arrays ganske enkelt at sammenligne referencerne for to arrays. false (referencerne er ikke ens) |
|
Metoden Arrays.equals vil sammenligne og som en-dimensionelle arrays, der gemmer referencer. De indeholder forskellige referencer. (indholdet af arrays er ikke ens) x1 x2 false |
|
true (indholdet er lige meget) |
"Tak, Rishi! Denne lektion er lige hvad jeg havde brug for for at gøre mit liv lettere og lykkeligere i fremtiden. Nu vil jeg bruge Arrays-klassens metoder og skrive mine programmer endnu hurtigere.
"Det var det, jeg regnede med, ha-ha. Men det er ikke alle de interessante metoder i Arrays-klassen. Jeg vil fortælle dig om andre næste gang."
GO TO FULL VERSION