JavaRush /Blogue Java /Random-PT /Matrizes em Java

Matrizes em Java

Publicado no grupo Random-PT
Imagine células em um depósito. Cada um tem seu próprio número e cada um contém algum tipo de objeto “Bagagem”. Ou uma carta de vinhos, em que todos os tipos de vinho estão numerados e no momento de fazer um pedido basta indicar o número da bebida. Ou uma lista de alunos de um grupo, em que o aluno “Andreev” estará escrito na primeira célula e “Yakovlev” na última célula. Ou uma lista de passageiros de avião, cada um com um assento com um número específico. Em Java, para trabalhar com estruturas semelhantes, ou seja, muitos dados homogêneos, muitas vezes são utilizados arrays em Java.

O que é uma matriz?

Um array é uma estrutura de dados que armazena elementos do mesmo tipo. Pode ser pensado como um conjunto de células numeradas, cada uma das quais pode conter alguns dados (um elemento de dados por célula). O acesso a uma determinada célula é feito através do seu número. O número de um elemento em uma matriz também é chamado de índice . No caso de Java, o array é homogêneo, ou seja, todas as suas células armazenarão elementos do mesmo tipo. Portanto, um array de inteiros contém apenas inteiros (por exemplo, do tipo int ), um array de strings contém apenas strings, um array de elementos da classe Dog que criamos conterá apenas objetos Dog . Ou seja, em Java não podemos colocar um inteiro na primeira célula de um array, uma String na segunda e um “cachorro” na terceira. Matrizes em Java

Declaração de matriz

Como declarar um array?

Como qualquer variável, um array em Java deve ser declarado. Você pode fazer isso de duas maneiras. Eles são equivalentes, mas o primeiro é mais consistente com o estilo Java. O segundo é o legado da linguagem C (muitos programadores C mudaram para Java e, para sua conveniência, foi deixado um método alternativo). A tabela mostra as duas maneiras de declarar um array em Java:
Não. Declaração de array, sintaxe Java Exemplos Um comentário
1.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
É aconselhável declarar um array desta forma, este é o estilo Java
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
Uma maneira herdada de declarar arrays de C/C++ que também funciona em Java
Em ambos os casos, dataType é o tipo das variáveis ​​no array. Nos exemplos declaramos dois arrays. Um armazenará números inteiros do tipo int , o outro armazenará objetos do tipo Object . Assim, quando um array é declarado, ele possui um nome e um tipo (o tipo das variáveis ​​do array). arrayName é o nome da matriz.

Criando uma matriz

Como criar uma matriz?

Como qualquer outro objeto, você pode criar um array Java, ou seja, reservar espaço de memória para ele, utilizando o operador new . Isso é feito assim:
new typeOfArray [length];
Onde typeOfArray é o tipo da matriz e length é o seu comprimento (ou seja, o número de células), expresso em números inteiros ( int ). No entanto, aqui apenas alocamos memória para o array, mas não associamos o array criado a nenhuma variável declarada anteriormente. Normalmente um array é primeiro declarado e depois criado, por exemplo:
int[] myArray; // array declaration
myArray = new int[10]; // creation, that is, allocation of memory for an array of 10 elements of type int
Aqui declaramos um array de números inteiros chamado myArray e, em seguida, declaramos que ele consiste em 10 células (cada uma das quais armazenará um número inteiro). No entanto, é muito mais comum criar um array imediatamente após a declaração usando esta sintaxe abreviada:
int[] myArray = new int[10]; // declaration and allocation of memory "in one bottle"
Observação:Depois de criar um array usando new , suas células são preenchidas com valores padrão. Para tipos numéricos (como em nosso exemplo) será 0, para boolean - false , para tipos de referência - null . Assim, após a operação
int[] myArray = new int[10];
obtemos um array de dez inteiros e, até que isso mude durante o programa, cada célula contém um 0.

Mais informações sobre arrays podem ser encontradas no artigo “ Algo sobre arrays

Comprimento da matriz em Java

Como dissemos acima, o comprimento de um array é o número de elementos para os quais o array foi projetado. O comprimento de um array não pode ser alterado depois de criado. Observação:Em Java, os elementos do array são numerados começando do zero. Ou seja, se tivermos um array de 10 elementos, então o primeiro elemento do array terá índice 0, e o último terá índice 9. Matrizes em Java - 3Você pode acessar o comprimento do array usando a variável length . Exemplo:
int[] myArray = new int[10]; // created an array of integers with 10 elements and named it myArray
System.out.println(myArray.length); // printed to the console the length of the array, that is, the number of elements that we can put in the array
Saída do programa:
10

Inicializando um array e acessando seus elementos

Como criar um array em Java já está claro. Após este procedimento, não obtemos um array vazio, mas sim um array preenchido com valores padrão. Por exemplo, no caso de int estes serão 0, e se tivermos um array com dados de um tipo de referência, então por padrão, null é escrito em cada célula . Acessamos um elemento do array (ou seja, escrevemos um valor nele ou o exibimos na tela ou realizamos alguma operação com ele) por seu índice. Inicializar um array é preenchê-lo com dados específicos (não por padrão). Exemplo: vamos criar um array de 4 estações e preenchê-lo com valores de string - os nomes dessas estações.
String[] seasons  = new String[4]; /* declared and created an array. Java allocated memory for an array of 4 strings, and now each cell is null (because the string is a reference type)*/

seasons[0] = "Winter"; /* in the first cell, that is, in the cell with a zero number, we wrote the string Winter. Here we get access to the zero element of the array and write a specific value there */
seasons[1] = "Spring"; // do the same procedure with cell number 1 (second)
seasons[2] = "Summer"; // ...number 2
seasons[3] = "Autumn"; // and with the last one, number 3
Agora, todas as quatro células do nosso array contêm os nomes das estações. A inicialização também pode ser feita de forma diferente, combinando inicialização e declaração:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Além disso, o novo operador pode ser omitido:
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

Como exibir um array em Java na tela?

Você pode exibir elementos do array na tela (ou seja, no console), por exemplo, usando um loop for . Outra maneira mais curta de exibir um array na tela será discutida no parágrafo “Métodos úteis para trabalhar com arrays" abaixo. Por enquanto, vamos dar uma olhada em um exemplo com saída cíclica de um array:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Como resultado, o programa produzirá o seguinte resultado:
Inverno Primavera Verão outono

Matrizes Java unidimensionais e multidimensionais

E se quisermos criar não um array de números, um array de strings ou um array de alguns objetos, mas um array de arrays? Java permite que você faça isso. O já familiar array int[] myArray = new int[8] é o chamado array unidimensional. E uma matriz de matrizes é chamada de bidimensional. É como uma tabela que possui um número de linha e um número de coluna. Ou, se você aprendeu o início da álgebra linear, em uma matriz. Matrizes em Java - 4Por que essas matrizes são necessárias? Em particular, para programar as mesmas matrizes e tabelas, bem como objetos que se assemelham a elas em estrutura. Por exemplo, o campo de jogo do xadrez pode ser especificado como uma matriz 8x8. Um array multidimensional é declarado e criado da seguinte forma:
int[][] myTwoDimentionalArray = new int [8][8];
Existem exatamente 64 elementos nesta matriz: myTwoDimentionalArray[0][0], myTwoDimentionalArray[0][1], myTwoDimentionalArray[1][0]e myTwoDimentionalArray[1][1]assim por diante até myTwoDimentionalArray[7][7]. Portanto, se usarmos para representar um tabuleiro de xadrez, a célula A1 representará myTwoDimentionalArray[0][0]e E2 representará myTwoDimentionalArray[4][1]. Onde há dois, há três. Em Java, você pode especificar um array de arrays... um array de arrays de arrays, e assim por diante. É verdade que matrizes tridimensionais e mais raramente são usadas. No entanto, usando uma matriz tridimensional, você pode programar, por exemplo, um cubo de Rubik.

Métodos úteis para trabalhar com arrays

Para trabalhar com arrays em Java existe uma classe java.util.Arrays (arrays em inglês significa “arrays”). Em geral, as seguintes operações são realizadas com mais frequência com arrays: preenchimento de elementos (inicialização), recuperação de um elemento (por número), classificação e pesquisa. Pesquisar e classificar matrizes é um tópico separado. Por um lado, é muito útil praticar e escrever você mesmo vários algoritmos de pesquisa e classificação. Por outro lado, todas as melhores práticas já foram escritas e incluídas nas bibliotecas Java, e podem ser utilizadas legalmente. Aqui estão três métodos úteis desta classe

Classificar uma matriz

O método void sort(int[] myArray, int fromIndex, int toIndex)classifica uma matriz de inteiros ou sua submatriz em ordem crescente.

Procurando em um array o elemento desejado

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key). Este método procura o elemento -chave em um array já classificado myArray ou subarray, começando em fromIndex e terminando em toIndex . Se o elemento for encontrado, o método retorna seu índice, caso contrário - (-fromIndex)-1.

Convertendo um array em uma string

O método String toString(int[] myArray)converte o array em uma string. O problema é que em Java os arrays não substituem toString() . Isso significa que se você tentar exibir o array inteiro (em vez de elemento por elemento, como em “ Imprimindo um array na tela ”) diretamente na tela ( System.out.println(myArray)), você obterá o nome da classe e o código hash hexadecimal do array. (isso é definido por Object.toString() ). Se você é iniciante, pode não entender a explicação do método toString. No primeiro estágio isso não é necessário, mas usando este método a saída do array é simplificada. Java facilita a exibição de um array sem usar um loop. Mais sobre isso no exemplo abaixo.

Exemplo de classificação, binarySearch e toString

Vamos criar um array de números inteiros, exibi-lo na tela usando toString , classificá-lo usando o método sort e encontrar algum número nele.
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; //declaring and initializing the array
        System.out.println(array);//trying to display our array on the screen without the toString method - we get a hexadecimal number
        System.out.println(Arrays.toString(array));//печатаем массив "правильно"
        Arrays.sort(array, 0, 4); // sort the entire array from zero to the fourth member
        System.out.println(Arrays.toString(array));//print the sorted array to the screen
        int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
        //binarySearch method will return the index of the sorted array element, in which the required number is "hidden"
        System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
        // and immediately display the result on the screen

    }
}
Saída do programa:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
A primeira linha é uma tentativa de exibir um array sem toString , a segunda é exibir um array usando toString , a terceira é um array ordenado, a quarta é o índice do número desejado 5 em um array ordenado (lembre-se que estamos contando a partir de zero, então o quarto elemento da matriz tem um índice 3). Na quinta linha vemos o valor -1 . Uma matriz não possui esse índice. A saída sinaliza que o elemento desejado (neste caso, 0) não está na matriz.

Mais sobre métodos da classe Array

A classe Arrays e seu uso – o artigo descreve alguns métodos da classe Array

A principal coisa sobre matrizes

  • As principais características de um array: o tipo de dados nele colocados, nome e comprimento.
    Este último é decidido durante a inicialização (alocação de memória para o array), os dois primeiros parâmetros são determinados ao declarar o array.

  • O tamanho do array (número de células) deve ser definido em int

  • Você não pode alterar o comprimento de uma matriz após ela ter sido criada.

  • Um elemento de array pode ser acessado por seu índice.

  • Em arrays, como em outras partes de Java, os elementos são numerados começando do zero.

  • Após o procedimento de criação do array, ele é preenchido com valores padrão.

  • Matrizes em Java são estruturadas de maneira diferente de C++. Eles são quase iguais aos ponteiros para matrizes dinâmicas.

Materiais úteis sobre matrizes

Quer saber mais sobre matrizes? Por favor, dê uma olhada nos artigos abaixo. Há muitas informações interessantes e úteis sobre este assunto.
  1. Something About Arrays – Bom artigo detalhado sobre arrays

  2. A classe Arrays e seu uso – o artigo descreve alguns métodos da classe Array

  3. Matrizes multidimensionais - um artigo detalhado sobre matrizes multidimensionais com exemplos.

  4. Retorne uma matriz de comprimento zero, não nula - o autor de Programação Eficaz, Joshua Bloch, fala sobre como retornar melhor matrizes vazias

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION