JavaRush /Java Blog /Random-IT /Qualcosa sugli array in Java

Qualcosa sugli array in Java

Pubblicato nel gruppo Random-IT
Ciao! In precedenza, durante l'addestramento, lavoravamo con oggetti singoli (o tipi primitivi). Ma cosa succede se dobbiamo lavorare non con un oggetto, ma con un intero gruppo? Ad esempio, vogliamo creare un elenco dei compleanni di tutti i dipendenti della nostra azienda. Dovrebbe contenere, diciamo, 30 righe nel formato: “Andrey Petrov, 25 gennaio”. Una struttura dati speciale, un array, ci aiuterà qui. Se confrontiamo la matrice con oggetti della vita reale, la sua struttura è molto simile a un caveau di una banca con celle: Qualcosa sugli array in Java - 1anche la matrice è composta da celle. Puoi mettere qualcosa in ogni cella. In questo caso per accedere al contenuto è necessario conoscere il numero di cellulare. L'array viene creato in questo modo:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
Qui abbiamo creato una matrice di 10 celle. Puoi immediatamente prestare attenzione ad alcune funzionalità dell'array:
  1. Memorizza dati di un tipo rigorosamente definito. Se inizialmente abbiamo creato un array di stringhe String, non saremo in grado di memorizzare nient'altro al suo interno. Il tipo di dati viene specificato durante la creazione dell'array. Questo è ciò che la distingue da una cassetta di sicurezza, nella quale il cliente può riporre ciò che vuole.
  2. Un array può memorizzare dati di tipi primitivi (ad esempio int), stringhe ( String) o oggetti della stessa classe. Più precisamente, nemmeno gli oggetti stessi, ma collegamenti a questi oggetti.
  3. La dimensione dell'array deve essere specificata durante la creazione. Non potrai specificarlo in un secondo momento o ridimensionarlo dopo la creazione.
Java indica che un array viene creato utilizzando parentesi quadre []su entrambi i lati dell'espressione. Possono essere specificati prima del nome della variabile di riferimento o dopo: funzionerà in entrambi i casi:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Se vuoi scrivere qualcosa in un array, devi specificare il numero della cella in cui verrà scritto il valore. I numeri di cella dell'array iniziano da 0. Iniziare da zero è una pratica comune nella programmazione. Più velocemente ti abitui, meglio è :) Qualcosa sugli array in Java - 2Cioè, se vuoi inserire un valore nella prima cella dell'array , è fatto in questo modo:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Ora la prima cella del nostro array, che contiene i compleanni dei colleghi, contiene una stringa con il compleanno di Lena. Per analogia, puoi aggiungere altri valori:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
Nota: abbiamo aggiunto il compleanno di Olesya all'ottava cella (hai dimenticato perché la cella n. 7 è l'ottava?). Sebbene tutte le altre celle non siano compilate. Non è necessario scrivere i valori nell'array in ordine: non esiste tale restrizione. D'altra parte, se scrivi in ​​ordine, sarà molto più facile tenere traccia del numero di celle libere e occupate, e non rimarranno “buchi” nell'array. Se vuoi ottenere il contenuto di una cella di un array, come nel caso di una cella di banca, devi conoscerne il numero. Questo è fatto in questo modo:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
Uscita console:

Олеся Остапенко, 3 января
Abbiamo creato una variabile Stringe detto al compilatore: "Trova la cella con l'indice 7 nell'array birthdayse assegna alla variabile il valore memorizzato lì String olesyaBirthday". Questo è esattamente quello che ha fatto.

Lunghezza dell'array Java

Quando lavori con un array, puoi facilmente scoprirne la lunghezza utilizzando una proprietà speciale - length.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Uscita console:

10
Nota:La proprietà lengthmemorizza la dimensione dell'array, non il numero di celle riempite. Il nostro array memorizza solo 3 valori, ma quando lo abbiamo creato, abbiamo specificato size = 10. Questo è il valore restituito dal campo length. Perché potrebbe essere utile? Bene, ad esempio, se vuoi stampare un elenco di tutti i compleanni sulla console (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] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Nel ciclo creiamo una variabile iinizialmente uguale a zero. Ad ogni passaggio, prendiamo la cella con indice i dal nostro array e stampiamo il suo valore sulla console. Il ciclo eseguirà 10 iterazioni e i valori di i aumenteranno da 0 a 9, proprio in base agli indici delle celle del nostro array! In questo modo stamperemo tutti i valori da birthdays[0]a sulla console birthdays[9] , infatti ci sono modi per creare un array in modo diverso. intAd esempio, è possibile creare una serie di numeri in questo modo:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Questo metodo è chiamato “inizializzazione rapida”. È abbastanza conveniente in quanto creiamo immediatamente un array e lo riempiamo di valori. Non è necessario specificare esplicitamente la dimensione dell'array: il campo lengthverrà compilato automaticamente durante l'inizializzazione rapida.
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);
   }
}
Uscita console:

9

Matrice di oggetti Java

Hai già sentito dire che gli array di oggetti e gli array di primitive vengono archiviati in memoria in modo diverso. Prendiamo, ad esempio, un array di tre oggetti Cat:
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("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
Ci sono alcune cose da capire qui:
  1. Nel caso delle primitive, gli array Java memorizzano molti valori specifici (come i numeri int). Nel caso degli oggetti, un array memorizza molti riferimenti. L'array catsè composto da tre celle, ciascuna delle quali contiene un riferimento a un oggetto Cat. Ciascuno dei collegamenti punta a un indirizzo in memoria in cui è archiviato l'oggetto.
  2. Gli elementi dell'array vengono archiviati in memoria in un singolo blocco. Questo viene fatto per un accesso più efficiente e rapido ad essi. Pertanto, il collegamento catspunta a un blocco di memoria in cui sono archiviati tutti gli oggetti, ovvero gli elementi dell'array. A cats[0]- a un indirizzo specifico all'interno di questo blocco.
Qualcosa sugli array in Java - 3È importante capire che un array non solo può memorizzare oggetti, ma è esso stesso un oggetto.

Matrice di matrici o matrice bidimensionale

Sulla base di ciò, ci troviamo di fronte alla domanda: possiamo creare, ad esempio, non un array di stringhe o numeri, ma un array di array? E la risposta sarà: sì, possiamo! Un array può memorizzare qualsiasi oggetto al suo interno, inclusi altri array. Un tale array sarà chiamato bidimensionale. Se lo rappresenti in un'immagine, sembrerà molto simile a un normale tavolo. Ad esempio, vogliamo creare un array che memorizzerà 3 array di numeri intcon 10 celle ciascuno. Apparirà così: Qualcosa sugli array in Java - 4Ogni riga rappresenta un array di numeri int. Il primo array contiene numeri da 1 a 10, il secondo da -1 a -10, il terzo un insieme di numeri casuali. Ciascuno di questi array è memorizzato in una cella del nostro array bidimensionale. L'inizializzazione di un array bidimensionale nel codice si presenta così:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Il nostro array di gatti bidimensionali memorizza 3 array di 5 celle ciascuno. Se vogliamo mettere il nostro oggetto nella terza cella del secondo array, lo facciamo in questo modo:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]punta al secondo array e [2]punta alla terza cella di questo array. Poiché un array bidimensionale è composto da più array, per attraversarlo e stampare tutti i valori sulla console (o riempire tutte le celle), abbiamo bisogno di un doppio ciclo nidificato:
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 (variabile i), attraversiamo a turno tutti gli array che compongono il nostro array bidimensionale. Nel ciclo interno (variabile j) iteriamo su tutte le celle di ciascun array. Di conseguenza, l'oggetto cats[0][0](primo array, prima cella) verrà visualizzato per primo sulla console e il secondo oggetto sarà cats[0][1](primo array, seconda cella). Quando il primo array è esaurito, verranno visualizzati , cats[1][0], cats[1][1]e cats[1][2]così via. A proposito, l'inizializzazione rapida è disponibile anche per gli array bidimensionali:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalmente scriveremmo un array bidimensionale numberscome int[3][3], ma questo metodo ci consente di specificare immediatamente i valori. Perché potrebbe essere necessario un array bidimensionale? Bene, ad esempio, con il suo aiuto puoi facilmente ricreare il famoso gioco "Battaglia Navale": Qualcosa sugli array in Java - 5la struttura del campo di gioco in "Battaglia Navale" è tale che può essere facilmente descritta: una matrice bidimensionale di 10 array, 10 celle ciascuno . Crei due di questi array: per te e il tuo avversario:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Compila con alcuni valori (ad esempio numeri o segni *) le celle in cui si trovano le tue navi, quindi tu e il tuo avversario, a turno, chiamate i numeri di cella:
  • battaglia marittima[6] [5]!
  • Passato! battaglia marittima2[6][6]!
  • Ferito!
  • battaglia marittima2[6][7]!
  • Ferito!
  • battaglia marittima2[6][8]!,
  • Ucciso!

Risorse aggiuntive sugli array

Vuoi saperne di più sugli array? Si prega di dare un'occhiata agli articoli seguenti. Ci sono molte informazioni interessanti e utili su questo argomento.
  1. Array in Java : un articolo dettagliato sugli array, sulla loro creazione, inizializzazione e utilizzo. Con esempi.
  2. La classe Arrays e il suo utilizzo : l'articolo descrive alcuni metodi della classeArray
  3. Arrays è la prima conferenza JavaRush dedicata agli array.
  4. Array multidimensionali : un articolo dettagliato sugli array multidimensionali con esempi.
  5. Restituisci un array di lunghezza zero, non nullo - L'autore di Effective Programming Joshua Bloch parla di come restituire meglio array vuoti.
Questo conclude la nostra prima conoscenza con gli array, ma questo è solo l'inizio dell'interazione con essi. Nelle lezioni seguenti vedremo modi interessanti per usarli e scopriremo anche quali funzioni integrate Java ha per lavorare più comodamente con questa struttura dati :)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION