CodeGym /Java Blog /Random-IT /Qualcosa sugli array
John Squirrels
Livello 41
San Francisco

Qualcosa sugli array

Pubblicato nel gruppo Random-IT
CIAO! In precedenza durante la tua formazione, abbiamo lavorato con oggetti singoli (e tipi primitivi). Ma cosa succede se abbiamo bisogno di lavorare con un intero gruppo di oggetti invece di uno solo? Ad esempio, supponiamo di voler creare un elenco di compleanni di tutti i dipendenti della nostra azienda. Dovrebbe contenere 30 stringhe formattate come segue: "Sarah Huffman, 25 gennaio" Beneficeremo di una struttura dati speciale chiamata array . Se confrontiamo un array con un oggetto reale, è molto simile a un caveau di una banca con cassette di sicurezza: Qualcosa sugli array - 1anche un array è composto da "scatole". Puoi mettere qualcosa (un elemento) in ogni scatola. Per accedere a un elemento è necessario conoscerne il numero di casella (indice). Ecco come viene creato un array:

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
Qui creiamo un array che contiene 10 elementi. Puoi immediatamente notare alcune caratteristiche dell'array:
  1. Memorizza elementi di un tipo di dati ben definito . Se creiamo un array di stringhe, non possiamo memorizzare nient'altro al suo interno. Il tipo di dati viene specificato al momento della creazione dell'array . È qui che differisce da una cassetta di sicurezza (in cui un cliente può conservare ciò che desidera).

  2. La sua dimensione deve essere specificata al momento della creazione dell'array . Non puoi indicarlo in un secondo momento o modificarne le dimensioni dopo la creazione dell'array .
Il fatto che stiamo creando un array è indicato dalle parentesi quadre su entrambi i lati dell'espressione. Possono essere specificati prima o dopo il nome della variabile di riferimento. In entrambi i casi funzionerà:

String [] birthdays = new String[10];
String birthdays [] = new String[10];
Se vuoi scrivere qualcosa in un array, devi specificare l'indice della casella in cui verrà scritto il valore. Le caselle in un array sono numerate a partire da 0. Il conteggio a partire da zero è una pratica molto comune nella programmazione. Prima ti ci abitui, meglio è :) Qualcosa sugli array - 2 Ciò significa che, se vuoi inserire un valore nella prima casella , fai così:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
Ora il compleanno di Jana è memorizzato nella prima cella del nostro array di compleanni dei dipendenti: puoi aggiungere altri valori in modo simile:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
Nota che abbiamo aggiunto il compleanno di Rosie all'ottava casella (non hai dimenticato perché la casella n. 7 è l'ottava casella, vero?) . Puoi vedere che non abbiamo riempito tutte le altre celle. Non dobbiamo scrivere i valori in un array in ordine. Non c'è tale requisito. Ovviamente, scrivere gli elementi in ordine rende molto più facile tenere traccia di quante scatole sono libere e quante sono occupate, e impedisce che l'array abbia "buchi". Se vuoi ottenere il contenuto di una delle scatole, allora (proprio come con una cassetta di sicurezza) devi conoscerne il numero. Ecco come è fatto:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
Output della console: Rosie Mills, 3 gennaio Abbiamo creato una Stringvariabile e detto al compilatore: "Trova la casella con l'indice 7 nell'array dei compleanni e assegna il valore in essa contenuto alla Stringvariabile rosieBirthday ". Ed è esattamente quello che ha fatto. Quando lavoriamo con gli array, possiamo facilmente trovare la loro lunghezza usando una proprietà speciale: length .

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Output della console: 10 Nota: la lengthproprietà memorizza la dimensione dell'array, non il numero di caselle piene. Il nostro array memorizza solo 3 valori, ma abbiamo indicato la sua dimensione come 10 quando l'abbiamo creato. E questo è esattamente il valore lengthrestituito dal campo. Perché questo dovrebbe tornare utile? Bene, supponiamo di voler visualizzare un elenco di tutti i compleanni (per verificare che nessuno sia stato dimenticato). Puoi farlo in un semplice ciclo:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Nel ciclo dichiariamo la variabile i, che viene inizializzata a zero. Ad ogni passaggio, otteniamo l'elemento con indice i dal nostro array e ne mostriamo il valore. Il ciclo eseguirà 10 iterazioni e i aumenterà da 0 a 9 e i numeri sono gli indici degli elementi del nostro array! Come risultato, mostreremo tutti i valori da birthdays[0] a birthdays[9] In realtà, c'è un altro modo per creare un array. Ad esempio, puoi creare un array di ints come questo:

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Questa tecnica è chiamata "inizializzazione scorciatoia". È abbastanza conveniente, perché creiamo contemporaneamente un array e lo riempiamo di valori. Non è necessario specificare esplicitamente la dimensione dell'array: con l'inizializzazione del collegamento, il lengthcampo viene impostato automaticamente.

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
Output della console: 9 Ora, un po' su come gli array sono immagazzinati in memoria. Supponiamo di avere un array di tre Catoggetti:

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
Devi capire alcune cose qui:
  1. Nel caso di primitive, un array memorizza un insieme di valori specifici (ad esempio ints). Nel caso di oggetti, un array memorizza un insieme di riferimenti .
    L' catsarray è composto da tre elementi, ciascuno dei quali è un riferimento a un Catoggetto. Ciascuno dei riferimenti punta all'indirizzo di memoria in cui è memorizzato l'oggetto corrispondente.

  2. Gli elementi dell'array sono disposti in un unico blocco in memoria. Questo viene fatto per consentire loro di accedervi in ​​modo rapido ed efficiente.
Pertanto, catsfa riferimento al blocco di memoria in cui sono archiviati tutti gli oggetti (elementi dell'array). Cats[0]fa riferimento a un indirizzo specifico all'interno di questo blocco. Qualcosa sugli array - 3 È importante capire che un array non memorizza solo oggetti: è esso stesso un oggetto. Questo ci porta a chiederci se possiamo creare non solo array di stringhe o numeri, ma anche array di array . E la risposta è sì, possiamo! Un array può memorizzare qualsiasi oggetto, inclusi altri array. Tale matrice è chiamata bidimensionale . Se dovessimo rappresentarlo visivamente, sarà molto simile a un normale tavolo. Supponiamo di voler creare un array di 3 array che possono memorizzare ciascuno 10 ints. Sembrerebbe così:
Qualcosa sugli array - 4
Ogni riga rappresenta un intarray. Il primo array contiene i numeri da 1 a 10, il secondo array — da -1 a -10, e il terzo — un insieme di numeri casuali. Ciascuno di questi array è memorizzato nelle caselle del nostro array bidimensionale. Nel codice, l'inizializzazione di un array bidimensionale si presenta così:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
I nostri gatti array bidimensionali memorizzano 3 array con 5 scatole in ogni array. Se vogliamo inserire un oggetto nella terza casella del secondo array, faremmo così:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]indica il secondo array e [2]indica la terza casella di quell'array. Poiché un array bidimensionale è costituito da diversi array, per scorrere su di esso e visualizzare tutti i suoi valori (o popolare tutti i suoi elementi), abbiamo bisogno di un ciclo annidato:

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
Nel ciclo esterno (variable i), iteriamo su tutti gli array nel nostro array bidimensionale. Nel ciclo interno (variable j), passiamo attraverso tutti gli elementi di ciascun array. Di conseguenza, cat[0][0] (primo array, primo elemento) verrà visualizzato per primo, seguito da cats[0][1] (primo array, secondo elemento). Dopo aver esaminato il primo array, visualizzeremo cats[1][0] , cats[1][1] , cats[1][2] , ecc. A proposito, anche gli array bidimensionali supportano inizializzazione abbreviata:

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalmente dichiareremmo l'array bidimensionale numberscome int[3][3], ma questa abbreviazione ci consente di specificare immediatamente i valori. Perché avresti bisogno di un array bidimensionale? Bene, potresti usarne uno per ricreare facilmente il famoso gioco "Battleship": Qualcosa sugli array - 5 In "Battleship", la struttura del campo di gioco può essere facilmente descritta: un array bidimensionale di 10 array con 10 elementi ciascuno. Crei due di questi array (uno per te e uno per il tuo avversario)

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
usa alcuni valori (ad es. numeri o simboli) per popolare gli elementi corrispondenti alla posizione delle tue navi, quindi, a turno, chiama le coordinate per elementi specifici:
  • corazzataTabellone1[0][2]!
  • Mancare! corazzataTabellone2[2][4]!
  • Colpo!
  • corazzataTabellone2[2][5]!
  • Colpo!
  • corazzataTabellone2[2][6]!,
  • Affondato!
Questo conclude la nostra prima introduzione agli array, ma è solo l'inizio della nostra interazione con essi. Nelle lezioni seguenti vedremo modi interessanti in cui possono essere utilizzati e impareremo anche quali funzioni integrate Java ha per permetterci di lavorare con questa struttura di dati in modo più conveniente :)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION