"Amigo, jag hoppas att du vid det här laget har insett hur användbara arrayer är i programmering?"
"Definitivt, Rishi! Jag har redan löst mer än en uppgift."
"Hade dina uppgifter upprepade handlingar? Sådana som du har gjort om och om igen."
"Om jag förstått dig rätt menar du liknande handlingar i olika uppgifter? Till exempel att överallt använda en loop för att visa innehållet i en array - jag är så trött på att göra det!"
"Ja, det är vad jag menar. Javas skapare märkte att Java-programmerare ofta skriver samma kod när de arbetar med arrayer. Till exempel kod för att kopiera en del av en array till en annan array, eller kod för att fylla varje cell i en array med samma eller ditt exempel: kod för att visa innehållet i en array i en läsbar form på skärmen.
"Och riktiga programmerare har en mycket viktig regel: upprepa inte dig själv. Du kommer att hålla med om att det är fel att göra överflödigt arbete - du kommer inte att få betalt för det. Effektivt arbete är bra betalt, tro mig. Förresten, en nybörjare är koden känns omedelbart igen av den stora mängden repetitiv kod.
"Javas skapare funderade över detta och skapade specialklassen Arrays
(dess fullständiga namn är java.util.Arrays
), och lade de mest populära array-relaterade åtgärderna i den."
"Hmm... Mycket intressant. Så vad har den exakt?
"Den har många metoder för varje tillfälle, men först ska vi överväga bara 10 av dem - de enklaste och mest använda.
Arrays.toString()
"Den första metoden vi ska titta på är ... Arrays.toString()
Men först lite bakgrund.
"Varje array i Java har en toString()
metod som returnerar en 'textuell representation av arrayen'. Du kan få en textuell representation av en array med följande sats:
String str = name.toString();
"Var name
är namnet på arrayvariabeln, och str
är namnet på variabeln som kommer att lagra strängrepresentationen av arrayen. Amigo, har du provat att skriva ut en array till skärmen med metoden ?System.out.println(name)
Jag erkänner, det hände. Jag såg lite skratt. Jag bestämde mig för att hålla mig borta från skada och att fortsätta använda loopar.
"Sannolikt såg du något i stil med:
I@37afeb11
"Den första bokstaven I
betyder att det är en int
array, och symbolerna efter @
är adressen till ett enda objekt i minnet. Du kan tänka på det som arrayens adress i minnet. Å ena sidan är det just den information som lagras i arrayvariabel, men å den andra förväntade du dig något annat, eller hur?"
"Precis! Jag tänkte se värdena i arrayen. Det här var det sista jag förväntade mig."
"Och det är precis därför de kom på metoden Arrays.toString()
- att visa värdena för en array. Vi kallar det så här:
String str = Arrays.toString(name);
Exempel:
|
Variabeln str kommer att innehålla strängen"[1, 2, 3]" |
|
Variabeln str kommer att innehålla strängen"[]" |
|
Variabeln str kommer att innehålla strängen"[Hi, How's, life?]" |
Arrays.deepToString()
"Men toString()
metoden är inte adekvat när det gäller tvådimensionella arrayer. Med andra ord, om du försöker ringa , Arrays.toString()
kommer du att se något bekant:
[I@37afeb11, I@37afeb21, I@37afeb31]
"Detta beror på att cellerna i en tvådimensionell array lagrar referenser till endimensionella arrayer. Och hur konverteras endimensionella arrayer till en sträng? Exakt som du ser ovan.
"Vad ska man göra då? Hur visar vi en tvådimensionell array korrekt?"
"Javas skapare förutsåg detta också. För detta ändamål Arrays
har klassen en annan speciell metod - deepToString()
. Att kalla det ser ut så här:
String str = Arrays.deepToString(name);
"Denna metod kan överföras arrayer som är tvådimensionella, endimensionella, tredimensionella eller i allmänhet vilken dimension som helst, och den kommer alltid att visa elementen i arrayen.
Exempel:
|
Variabeln str kommer att innehålla strängen"[1, 2, 3]" |
|
Variabeln str kommer att innehålla strängen"[[1, 1], [2, 2], [3, 3]]" |
|
Variabeln str kommer att innehålla strängen"[[[1, 2, 3], [1]], [[]]]" |
Arrays.equals()
"Vi kom på hur vi skulle visa arrayer på skärmen. Hur är det med att jämföra arrayer? Kommer du ihåg vilka metoder vi kan använda för att jämföra strängar?"
"Jag brukar använda equals
metoden!
"Ja, equals
, och även equalsIgnoreCase
(som jämför strängar utan hänsyn till versaler och gemener).
"Goda nyheter: du kan också använda equals
metoden för arrayer. Dåliga nyheter: den jämför inte innehållet i arrayer. Metoden equals
för arrayer gör samma sak som ==
operatören - den jämför referenser.
Exempel:
|
false (referenserna är inte lika) |
|
Metoden equals att arrays helt enkelt jämföra referenserna för två arrayer. false (referenserna är inte lika) |
"Så vad gör vi? Hur jämför vi arrayer baserat på deras innehåll?"
"Återigen Arrays
kommer klassen till vår räddning. Mer specifikt, dess Arrays.equals()
metod. Så här kallar vi det:
Arrays.equals(name1, name2)
"Metoden returnerar true
om arrayerna är lika långa och deras element är lika. Annars returnerar den false
.
Exempel:
|
Metoden equals att arrays helt enkelt jämföra referenserna för två arrayer. false (referenserna är inte lika) |
|
true (innehållet är lika) |
|
false (innehållet i arrayerna är olika) |
Arrays.deepEquals()
"Och, som du förmodligen redan gissat, Arrays.equals
kommer metoden inte att fungera korrekt för tvådimensionella arrayer: den behandlar tvådimensionella arrayer som en endimensionell array vars element är adresser till endimensionella arrayer.
"För att korrekt jämföra flerdimensionella arrayer ( n = 1, 2, 3,...
) kom de alltså på Arrays.deepEquals()
metoden. Att kalla den ser ut så här:
Arrays.deepEquals(name1, name2)
"Metoden returnerar true
om arrayerna är lika långa och deras element är lika. Annars returnerar denfalse
. Om elementen inuti arrayen också är arrayer, Arrays.deepEquals()
används metoden för att jämföra dem, och så vidare.
Exempel:
|
Metoden equals att arrays helt enkelt jämföra referenserna för två arrayer. false (referenserna är inte lika) |
|
Metoden Arrays.equals kommer att jämföra och som endimensionella arrayer som lagrar referenser. De innehåller olika referenser. (innehållet i arrayerna är inte lika) x1 x2 false |
|
true (innehållet är lika) |
"Tack, Rishi! Den här lektionen är precis vad jag behövde för att göra mitt liv enklare och lyckligare i framtiden. Nu ska jag använda Arrays-klassens metoder och skriva mina program ännu snabbare.
"Det var vad jag räknade med, ha-ha. Men det här är inte alla de intressanta metoderna i Arrays-klassen. Jag kommer att berätta om andra nästa gång."
GO TO FULL VERSION