Arrays i CodeGym-kurset På CodeGym begynner du å jobbe med arrays på nivå 7 av Java Syntax-oppdraget. Tre leksjoner er viet til dem, samt 8 oppgaver på ulike nivåer for å konsolidere ferdighetene dine i å jobbe med matriser. Men du vil møte arrays mange ganger i løpet av kurset (spesielt vil Array-klassen bli studert i Java Collections- oppdraget og som en del av ditt fremtidige arbeid. |
Hva er en array?
En matrise er en datastruktur som lagrer elementer av samme type. Du kan tenke på det som et sett med nummererte celler. Du kan legge inn noen data i hver celle (ett dataelement per celle). En bestemt celle åpnes ved å bruke nummeret. Et elements nummer i matrisen kalles også en indeks . I Java er en matrise homogen, dvs. at alle cellene inneholder elementer av samme type. Dermed inneholder en matrise med heltall bare heltall ( int ), en matrise med strenger - bare strenger, og en matrise med forekomster av en Dog- klasse som vi har laget vil kun inneholde Dog- objekter. Med andre ord, Java lar oss ikke sette et heltall i den første cellen i matrisen, en streng i den andre og en hund i den tredje.Deklarerer en matrise
Hvordan erklærer du en matrise?
Som enhver variabel, må en matrise deklareres i Java. Dette kan gjøres på en av to måter. De er likeverdige, men den første måten er mer konsistent med Java-stil. Den andre er en arv fra C-språket: mange C-programmerere byttet til Java, og en alternativ metode ble beholdt for deres bekvemmelighet. Tabellen viser begge måter å deklarere en matrise på i Java:Nei. | Erklære en matrise, Java-syntaks | Eksempler | Kommentar |
---|---|---|---|
1. |
dataType[] arrayName; |
|
Det er tilrådelig å deklarere en matrise på denne måten. Dette er Java-stil. |
2. |
dataType arrayName[]; |
|
Array-deklarasjonsmetode arvet fra C/C++, fungerer i Java |
Opprette en matrise
Hvordan lager du en matrise?
Som alle andre objekter kan du lage en Java-array, dvs. reservere en plass i minnet for den, ved å bruke den nye operatoren. Slik gjøres det:
new typeOfArray[length];
der typeOfArray er matrisens type og lengde er lengden (dvs. antall celler) uttrykt som et helt tall ( int
). Men merk at her har vi bare allokert minne for matrisen - vi har ikke assosiert den deklarerte matrisen med noen tidligere erklært variabel. Vanligvis blir en matrise først erklært og deretter instansiert, for eksempel:
int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
Her laget vi en rekke heltall kalt myArray , og informerte kompilatoren om at den består av 10 celler (som hver vil inneholde et heltall). Imidlertid er det mye mer vanlig å bruke følgende forkortede syntaks for å lage en matrise umiddelbart når den er deklarert:
int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
Vennligst merk:Etter at en matrise er opprettet med den nye operatoren, inneholder cellene standardverdier. For numeriske typer (som i vårt eksempel) er standardverdien 0, for den boolske typen er den falsk , og for referansetyper er den null . Altså, etter å ha utført denne uttalelsen
int[] myArray = new int[10];
vi får en matrise med ti heltall, og inntil programmet gjør noe for å endre verdiene, inneholder hver celle 0.
Du finner mer informasjon om arrays i artikkelen " Noe om arrays " |
Matriselengde i Java
Som vi sa ovenfor, er lengden på en matrise antallet elementer som matrisen er designet for å inneholde. Lengden på en matrise kan ikke endres etter at den er opprettet. Vær oppmerksom påat matriseelementer er nummerert fra null i Java. Derfor, hvis vi har en matrise med 10 elementer, er indeksen til det første elementet 0 og indeksen til det siste er 9. Du kan få matriselengden ved å bruke lengdevariabelen . For eksempel:
int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
Produksjon:
10
Initialisere en matrise og få tilgang til elementene
Nå vet vi hvordan vi lager en matrise i Java. Prosessen gir oss ikke en tom matrise, men en matrise fylt med standardverdier. For eksempel, for en int- matrise, er dette 0, og hvis vi har en matrise av en hvilken som helst referansetype, er standardverdien i hver celle null . Vi får tilgang til et matriseelement (for eksempel for å angi verdien, vise det på skjermen eller utføre en operasjon med det) ved hjelp av indeksen. Matriseinitialisering er prosessen med å fylle en matrise med spesifikke verdier (annet enn standard). Eksempel: la oss lage en strengmatrise for de 4 årstidene og fylle den med navnene på årstidene.
String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */
seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
Nå er navnene på årstidene skrevet til de fire cellene i matrisen vår. Vi kan initialisere matrisen på en annen måte, ved å kombinere erklæringen og initialiseringen:
String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Dessuten kan den nye operatøren utelates:
String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};
Hvordan viser du en matrise på skjermen i Java?
Du kan vise array-elementer på skjermen (dvs. på konsollen) ved å bruke en for- løkke. En annen, kortere måte å vise en matrise på vil bli diskutert i avsnittet med tittelen " Nyttige metoder for å arbeide med matriser ". I mellomtiden kan du ta en titt på dette eksemplet der en matrise vises ved hjelp av en løkke:
String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Programmet vil vise følgende:
Winter
Spring
Summer
Autumn
Endimensjonale og flerdimensjonale arrays i Java
Men hva om vi ikke ønsker å lage en rekke tall, strenger eller andre objekter, men heller en rekke matriser? Java lar deg gjøre dette. Den typen matrise vi allerede er kjent med ( int[] myArray = new int[8] ) er kjent som en endimensjonal matrise. Men en rekke matriser kalles en todimensjonal matrise. Det er som en tabell som har et radnummer og et kolonnenummer. Eller, hvis du har lært det grunnleggende om lineær algebra, kan du tenke på det som en matrise. Hvorfor trenger vi slike arrays? Vel, for å programmere matriser og tabeller, så vel som andre objekter som har en lignende struktur. For eksempel kan et sjakkbrett representeres av en 8x8 matrise. En flerdimensjonal matrise erklæres og opprettes som følger:
Int[][] myTwoDimentionalArray = new int[8][8];
Denne matrisen har nøyaktig 64 elementer: myTwoDimentionalArray[0][0] , myTwoDimentionalArray[0][1] , myTwoDimentionalArray[1][0] , myTwoDimentionalArray[1][1] og så videre opp til myTwoDimentionalArray[7][7] . Så hvis vi bruker det til å representere et sjakkbrett, tilsvarer A1 myTwoDimentionalArray[0][0] og E2 tilsvarer myTwoDimentionalArray[4][1] . Men hvor langt kan vi presse dette? I Java kan du spesifisere en rekke arrays... en array of arrays of arrays, og så videre. Selvfølgelig brukes tredimensjonale og høyere dimensjonale arrays svært sjelden. Når det er sagt, kan du bruke en tredimensjonal matrise til å programmere en Rubiks kube, for eksempel.
Nyttige metoder for å arbeide med arrays
Java har klassen java.util.Arrays for arbeid med arrays. Generelt er de vanligste operasjonene som utføres på arrays initialisering (fylling med elementer), henting av et element (ved indeks), sortering og søking. Søking og sortering av matriser er emner for en annen dag. På den ene siden er det god praksis å skrive flere søke- og sorteringsalgoritmer selv. På den annen side er alle de beste algoritmene allerede implementert og inkludert i standard Java-biblioteker, og du kan lovlig bruke dem. Her er tre nyttige metoder i denne klassen.Sortering av en matrise
Metoden void sort(int[] myArray, int fromIndex, int toIndex) sorterer en heltallsmatrise eller undermatrise i stigende rekkefølge.Søker etter et element i en matrise
int binært søk(int[] minArray, int fraindeks, int tilindeks, int nøkkel) . Denne metoden ser etter nøkkelelementet i en sortert myArray- matrise eller subarray, fra fromIndex til toIndex . Hvis varen blir funnet, returnerer den sin indeks. Ellers returnerer den (-fromIndex)-1 .Konvertering av en matrise til en streng
Metoden String toString(int[] myArray) konverterer en matrise til en streng. I Java overstyrer ikke arrays toString() . Dette betyr at hvis du prøver å vise en hel matrise på en gang (System.out.println(myArray)) i stedet for ett element om gangen som i avsnittet med tittelen " Vis en matrise på skjermen ", får du navnet på klassen og arrayens heksadesimale hash (definert av Object.toString() ). Hvis du er nybegynner, forstår du kanskje ikke forklaringen om toString- metoden. I utgangspunktet trenger du ikke det, men å bruke denne metoden gjør det lettere å vise en matrise. Java lar deg enkelt vise en matrise uten å bruke en loop. Eksemplet nedenfor viser dette.Et eksempel som bruker sort, binarySearch og toString
La oss lage en matrise med heltall, vise den ved å bruke toString , sortere den ved å bruke sorteringsmetoden , og deretter finne et tall i den.
class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
System.out.println(Arrays.toString(array)); // Display the array correctly
Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
System.out.println(Arrays.toString(array)); // Display the sorted array
int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array.
// The binarySearch method will return the index of the array element we are searching for
System.out.println(key); // Display the index of the number we searched for
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array,
// and immediately display the result
}
}
Produksjon:
[I@1540e19d
[1, 5, 4, 3, 7]
[1, 3, 4, 5, 7]
3
-1
Den første strengen er et forsøk på å vise matrisen uten å bruke toString . Den andre er matrisen som vises med toString . Den tredje er den sorterte matrisen. Den fjerde er indeksen til tallet vi søkte etter (5) i den sorterte matrisen (husk at vi teller fra null, så indeksen til matrisens fjerde element er 3). I den femte strengen ser vi -1. Dette er en ugyldig matriseindeks. Det signaliserer at tallet vi søkte etter (i dette tilfellet 0) ikke er i matrisen.
Mer om metoder i Array-klassen Arrays-klassen og dens bruk — Denne artikkelen beskriver noen metoder i Array-klassen. |
Arrays i et nøtteskall
-
Viktige egenskaper for en matrise: typen data som er plassert i den, dens navn og lengde.
Den siste egenskapen bestemmes når matrisen opprettes (når minne er allokert for matrisen). De to første egenskapene bestemmes når matrisen er deklarert. -
Matrisestørrelsen (antall celler) må være en int
-
Det er umulig å endre lengden på en matrise etter at den er opprettet.
-
Et matriseelement kan nås med indeksen.
-
Elementer i matriser, som alt annet i Java, er nummerert fra null.
-
Etter at en matrise er opprettet, er den fylt med standardverdier.
-
Arrays i Java er ikke det samme som array i C++. De er nesten som pekere til dynamiske matriser.
GO TO FULL VERSION