CodeGym /Java-blogg /Tilfeldig /Arrays i Java
John Squirrels
Nivå
San Francisco

Arrays i Java

Publisert i gruppen
Se for deg skap i en bod. Hver av dem har sitt eget nummer, og hver av dem lagrer et eller annet bagasjeobjekt. Eller en vinliste hvor alle typer vin er nummerert og du bestiller ved å oppgi nummeret på drinken din. Eller en liste over studenter der "Adams" er spilt inn i første posisjon og "Zimmer" er sist. Eller en liste over passasjerer på et fly, som hver er tildelt et nummerert sete. I Java brukes ofte arrays for å jobbe med slike strukturer, altså sett med homogene data.

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.Arrays i Java - 2

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;

int[] myArray;

Object[] 
arrayOfObjects;  
Det er tilrådelig å deklarere en matrise på denne måten. Dette er Java-stil.
2.
dataType arrayName[];

int myArray[];

Object 
arrayOfObjects[];
Array-deklarasjonsmetode arvet fra C/C++, fungerer i Java
I begge tilfeller er dataType typen til variablene i matrisen. I eksemplene erklærte vi to matriser. Den ene vil lagre int s, og den andre — Objektobjekter . Dermed har en matriseerklæring et navn og en type (typen til elementene i matrisen). ArrayName er navnet på arrayen.

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. Arrays i Java - 3Du 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. Arrays i Java - 4Hvorfor 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-klassen har 18 viktige metoder for å arbeide med arrays

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.

Nyttig materiale om matriser

Vil du vite mer om arrays? Sjekk ut artiklene nedenfor. Det inkluderer mye interessant og nyttig materiale om dette emnet.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION