1. Arrays
klasse
Som vi bemærkede tidligere, er arrays et meget nyttigt og ofte brugt i programmering.
Javas skabere bemærkede meget hurtigt, at Java-programmører ofte skriver den samme kode, når de arbejder med arrays. Kopier for eksempel en del af et array til et andet array, kode for at udfylde hver celle i et array med den samme værdi, vis indholdet af et array i et praktisk format osv.
Det er derfor, de oprettede specialklassen Arrays
(den fulde navn er java.util.Arrays
), og satte de mest populære array-relaterede handlinger ind i den.
Det har en masse metoder til enhver lejlighed, men først vil vi overveje kun 10 af dem - de enkleste og mest brugte.
2.Arrays.toString()
Den første metode, vi vil se på, hedder 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 hjælp af 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.
Men hvis du prøver at udskrive arrayet til skærmen ved hjælp af metoden , vil du højst sandsynligt se noget som dette:System.out.println(name)
I@37afeb11
Det første bogstav I
betyder, at det er et int
array, og symbolerne efter @
er adressen på arrayet i hukommelsen. På den ene side er det netop den information, der er gemt i array-variablen, men på den anden side forventede vi noget andet, ikke?
Vi ønskede at se værdierne i arrayet! Og det er netop derfor, de fandt frem til metoden Arrays.toString()
- at vise værdierne af et array. Vi kalder det sådan her:
String str = Arrays.toString(name);
Eksempler:
|
Variablen str vil indeholde strengen:
|
|
Variablen str vil indeholde strengen:
|
|
Variablen str vil indeholde strengen:
|
3.Arrays.deepToString()
Men hvis du prøver at konvertere en todimensional matrix til en streng (for at vise den) using the Arrays.toString()
metode, vil du se noget velkendt:
[I@37afeb11, I@37afeb21, I@37afeb31]
Alt dette skyldes, at cellerne i et todimensionelt array lagrer referencer til endimensionelle arrays. Og hvordan konverteres endimensionelle arrays til en streng? Præcis som du ser ovenfor.
Hvad kan gøres? Hvordan viser vi et todimensionelt array korrekt?
Til dette formål Arrays
har klassen en anden speciel metode - deepToString()
. At kalde det 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.
Bemærk: metoden Arrays.deepToString()
virker ikke med endimensionelle arrays af primitiver (f.eks. int[]
).
Eksempler:
|
Variablen str vil indeholde strengen:
|
|
Variablen str vil indeholde strengen:
|
|
Variablen str vil indeholde strengen:
|
4.Arrays.equals()
Vi fandt ud af, hvordan man viser arrays på skærmen, men hvad med at sammenligne arrays?
For at sammenligne strenge har vi equals
og equalsIgnoreCase
metoder, men hvilke metoder har arrays?
Den gode nyhed er, at arrays har en equals
metode. Den dårlige nyhed er, at den ikke sammenligner indholdet af arrays. Metoden equals
med arrays gør det samme som ==
operatøren - den sammenligner referencer. Eksempler:
Eksempler:
|
false (referencerne er ikke ens) |
|
Metoden equals til arrays ganske enkelt at sammenligne referencerne for to arrays. false (referencerne er ikke ens) |
Hvad kan gøres? Hvordan sammenligner vi arrays baseret på deres indhold?
Og igen Arrays
kommer den os til undsætning, eller 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 vender den tilbage 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) |
5.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 korrekt at sammenligne multidimensionelle arrays ( n = 1, 2, 3,...
), kom de frem til Arrays.deepEquals()
metoden. At kalde det ser sådan ud:
Arrays.deepEquals(name1, name2)
Metoden vender tilbagetrue
hvis arrays er lige lange og deres elementer er ens. Ellers vender den tilbagefalse
. 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) |