JavaRush /Blogue Java /Random-PT /Algo sobre arrays em Java

Algo sobre arrays em Java

Publicado no grupo Random-PT
Olá! Anteriormente, durante o treinamento, trabalhávamos com objetos únicos (ou tipos primitivos). Mas e se precisarmos trabalhar não com um objeto, mas com todo um grupo? Por exemplo, queremos criar uma lista de aniversários de todos os funcionários da nossa empresa. Deve conter, digamos, 30 linhas no formato: “Andrey Petrov, 25 de janeiro”. Uma estrutura de dados especial, um array, nos ajudará aqui. Se você comparar o array com objetos da vida real, sua estrutura é muito semelhante a um cofre de banco com células: Algo sobre arrays em Java - 1o array também consiste em células. Você pode colocar algo em cada célula. Nesse caso, para acessar o conteúdo é preciso saber o número do celular. A matriz é criada assim:
public class Main {

   public static void main(String[] args) {

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

   }
}
Aqui criamos um array de 10 células. Você pode prestar atenção imediatamente a alguns recursos do array:
  1. Ele armazena dados de um tipo estritamente definido. Se inicialmente criamos um array de strings String, não poderemos armazenar mais nada nele. O tipo de dados é especificado ao criar a matriz. É isto que o distingue de um cofre, onde o cliente pode guardar o que quiser.
  2. Um array pode armazenar dados de tipos primitivos (por exemplo, int), strings ( String) ou objetos da mesma classe. Mais precisamente, nem mesmo os próprios objetos, mas links para esses objetos.
  3. O tamanho do array deve ser especificado durante a criação. Você não poderá especificá-lo posteriormente ou redimensioná-lo após a criação.
Java indica que um array está sendo criado usando colchetes []em ambos os lados da expressão. Eles podem ser especificados antes ou depois do nome da variável de referência - funcionará de qualquer maneira:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Se quiser escrever algo em um array, você precisa especificar o número da célula na qual o valor será escrito. Os números das células da matriz começam em 0. Começar do zero é uma prática comum em programação. Quanto mais rápido você se acostumar, melhor :) Algo sobre arrays em Java - 2Ou seja, se quiser colocar algum valor na primeira célula do array , é feito assim:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Agora a primeira célula do nosso array, que contém os aniversários dos colegas, contém uma string com o aniversário da Lena. Por analogia, você pode adicionar outros valores:
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";
   }
}
Observação: adicionamos o aniversário de Olesya à oitava célula (você esqueceu por que a célula nº 7 é a oitava?). Embora todas as outras células não sejam preenchidas. Não é necessário escrever os valores na matriz em ordem - não existe tal restrição. Por outro lado, se você escrever em ordem, será muito mais fácil controlar o número de células livres e ocupadas, e não haverá “buracos” no array. Se você deseja obter o conteúdo de uma célula de um array, como no caso de uma célula de banco, você precisa saber seu número. Isso é feito assim:
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);
   }
}
Saída do console:

Олеся Остапенко, 3 января
Criamos uma variável Stringe dissemos ao compilador: “Encontre a célula com índice 7 no array birthdayse atribua o valor armazenado ali à variável String olesyaBirthday.” Foi exatamente isso que ele fez.

Comprimento da matriz Java

Ao trabalhar com um array, você pode descobrir facilmente seu comprimento usando uma propriedade especial - 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);
   }
}
Saída do console:

10
Observação:A propriedade lengtharmazena o tamanho da matriz, não o número de células preenchidas. Nosso array armazena apenas 3 valores, mas quando o criamos especificamos size = 10. Este é o valor que o campo retorna length. Por que isso pode ser útil? Bem, por exemplo, se você quiser imprimir uma lista de todos os aniversários no console (para verificar se ninguém foi esquecido), você pode fazer isso em um simples loop:
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]);
       }
   }
}
No loop criamos uma variável ique é inicialmente igual a zero. Em cada passagem, pegamos a célula com índice i do nosso array e imprimimos seu valor no console. O loop fará 10 iterações, e os valores de i aumentarão de 0 a 9 - apenas de acordo com os índices das células do nosso array! Desta forma imprimiremos todos os valores de birthdays[0]até para o console.Na birthdays[9] verdade, existem maneiras de criar um array de forma diferente. Por exemplo, uma matriz de números intpode ser criada assim:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Este método é denominado “inicialização rápida”. É bastante conveniente porque criamos imediatamente um array e o preenchemos com valores. Não há necessidade de especificar explicitamente o tamanho do array - o campo lengthserá preenchido automaticamente durante a inicialização rápida.
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);
   }
}
Saída do console:

9

Matriz de objetos Java

Você já ouviu falar que arrays de objetos e arrays de primitivos são armazenados na memória de maneira diferente. Tomemos, por exemplo, um array de três objetos 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");
   }
}
Existem algumas coisas para entender aqui:
  1. No caso dos primitivos, os arrays Java armazenam muitos valores específicos (como números int). No caso de objetos, um array armazena muitas referências. A matriz catsconsiste em três células, cada uma contendo uma referência a um objeto Cat. Cada um dos links aponta para um endereço na memória onde aquele objeto está armazenado.
  2. Os elementos do array são armazenados na memória em um único bloco. Isso é feito para um acesso mais eficiente e rápido a eles. Assim, o link catsaponta para um bloco na memória onde todos os objetos – os elementos do array – estão armazenados. A cats[0]- para um endereço específico dentro deste bloco.
Algo sobre arrays em Java – 3É importante entender que um array não pode apenas armazenar objetos, ele próprio é um objeto.

Matriz de matrizes ou matriz bidimensional

Com base nisso, nos deparamos com a questão - podemos criar, por exemplo, não um array de strings ou números, mas um array de arrays? E a resposta será: sim, podemos! Um array pode armazenar qualquer objeto dentro dele, incluindo outros arrays. Tal array será chamado de bidimensional. Se você retratá-lo em uma imagem, será muito semelhante a uma mesa normal. Por exemplo, queremos criar um array que armazene 3 arrays de números intcom 10 células cada. Ficará assim: Algo sobre arrays em Java – 4Cada linha representa um array de números int. A primeira matriz contém números de 1 a 10, a segunda - de -1 a -10, a terceira - um conjunto de números aleatórios. Cada uma dessas matrizes é armazenada em uma célula da nossa matriz bidimensional. A inicialização de um array bidimensional no código é semelhante a esta:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Nosso array bidimensional de gatos armazena 3 arrays de 5 células cada. Se quisermos colocar nosso objeto na terceira célula do segundo array, fazemos assim:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]aponta para a segunda matriz e [2]aponta para a terceira célula desta matriz. Como um array bidimensional consiste em vários arrays, para percorrê-lo e imprimir todos os valores no console (ou preencher todas as células), precisamos de um loop duplo aninhado:
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
No loop externo (variável i), nos revezamos percorrendo todos os arrays que compõem nosso array bidimensional. No loop interno (variável j), iteramos por todas as células de cada array. Como resultado, o objeto cats[0][0](primeira matriz, primeira célula) será exibido primeiro no console e o segundo objeto será cats[0][1](primeira matriz, segunda célula). Quando a primeira matriz se esgotar, , cats[1][0]e cats[1][1]assim cats[1][2]por diante serão gerados. A propósito, a inicialização rápida também está disponível para arrays bidimensionais:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalmente, escreveríamos um array bidimensional numberscomo int[3][3], mas este método nos permite especificar imediatamente os valores. Por que uma matriz bidimensional pode ser necessária? Bem, por exemplo, com sua ajuda você pode recriar facilmente o famoso jogo “Battleship”: Algo sobre arrays em Java – 5A estrutura do campo de jogo em “Battleship” é tal que pode ser facilmente descrita: uma matriz bidimensional de 10 matrizes, 10 células cada . Você cria duas dessas matrizes - para você e para seu oponente:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Você preenche com alguns valores (por exemplo, números ou sinais *) as células em que suas naves estão localizadas, e então você e seu oponente se revezam ligando para os números das células:
  • batalha marítima[6][5]!
  • Passado! SeaBattle2[6][6]!
  • Ferido!
  • SeaBattle2[6][7]!
  • Ferido!
  • batalha marítima2[6][8]!,
  • Morto!

Recursos adicionais sobre arrays

Quer saber mais sobre matrizes? Por favor, dê uma olhada nos artigos abaixo. Há muitas informações interessantes e úteis sobre este assunto.
  1. Arrays em Java - um artigo detalhado sobre arrays, sua criação, inicialização e uso. Com exemplos.
  2. A classe Arrays e seu uso – o artigo descreve alguns métodos da classeArray
  3. Arrays é a primeira palestra JavaRush dedicada a arrays.
  4. Matrizes multidimensionais - um artigo detalhado sobre matrizes multidimensionais com exemplos.
  5. Retorne uma matriz de comprimento zero, não nula - o autor de Programação Eficaz, Joshua Bloch, fala sobre como retornar melhor matrizes vazias.
Isso conclui nosso primeiro contato com arrays, mas é apenas o começo da interação com eles. Nas palestras a seguir veremos maneiras interessantes de usá-los, e também descobriremos quais funções integradas o Java possui para trabalhar de forma mais conveniente com esta estrutura de dados :)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION