Java - Arrays
Java fornece uma estrutura de dados, o array, que armazena uma coleção sequencial de tamanho fixo de elementos do mesmo tipo. Uma matriz é usada para armazenar uma coleção de dados, mas geralmente é mais útil pensar em uma matriz como uma coleção de variáveis do mesmo tipo.
Em vez de declarar variáveis individuais, como número0, número1, ... e número99, você declara uma variável de matriz, como números e usa números [0], números [1] e ..., números [99] para representar variáveis individuais.
Este tutorial apresenta como declarar variáveis de array, criar arrays e processar arrays usando variáveis indexadas.
Declarando Variáveis de Matriz
Para usar uma matriz em um programa, você deve declarar uma variável para fazer referência à matriz e deve especificar o tipo de matriz à qual a variável pode fazer referência. Aqui está a sintaxe para declarar uma variável de array -
Sintaxe
dataType[] arrayRefVar; // preferred way.
or
dataType arrayRefVar[]; // works but not preferred way.
Note - o estilo dataType[] arrayRefVaré preferível. O estilodataType arrayRefVar[] vem da linguagem C / C ++ e foi adotado em Java para acomodar programadores C / C ++.
Exemplo
Os seguintes trechos de código são exemplos dessa sintaxe -
double[] myList; // preferred way.
or
double myList[]; // works but not preferred way.
Criação de matrizes
Você pode criar uma matriz usando o novo operador com a seguinte sintaxe -
Sintaxe
arrayRefVar = new dataType[arraySize];
A declaração acima faz duas coisas -
Ele cria uma matriz usando novo dataType [arraySize].
Ele atribui a referência do array recém-criado à variável arrayRefVar.
Declarar uma variável de matriz, criar uma matriz e atribuir a referência da matriz à variável podem ser combinados em uma instrução, conforme mostrado abaixo -
dataType[] arrayRefVar = new dataType[arraySize];
Alternativamente, você pode criar matrizes da seguinte forma -
dataType[] arrayRefVar = {value0, value1, ..., valuek};
Os elementos da matriz são acessados por meio do index. Os índices de array são baseados em 0; ou seja, eles começam de 0 aarrayRefVar.length-1.
Exemplo
A instrução a seguir declara uma variável de array, myList, cria um array de 10 elementos do tipo double e atribui sua referência a myList -
double[] myList = new double[10];
A imagem a seguir representa o array myList. Aqui, myList contém dez valores duplos e os índices vão de 0 a 9.
Processando matrizes
Ao processar elementos da matriz, costumamos usar tanto for loop ou foreach loop porque todos os elementos em uma matriz são do mesmo tipo e o tamanho da matriz é conhecido.
Exemplo
Aqui está um exemplo completo que mostra como criar, inicializar e processar matrizes -
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// Print all the array elements
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// Summing all elements
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// Finding the largest element
double max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
System.out.println("Max is " + max);
}
}
Isso produzirá o seguinte resultado -
Resultado
1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
Os Loops foreach
O JDK 1.5 introduziu um novo loop for conhecido como loop foreach ou loop for aprimorado, que permite percorrer o array completo sequencialmente sem usar uma variável de índice.
Exemplo
O código a seguir exibe todos os elementos na matriz myList -
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// Print all the array elements
for (double element: myList) {
System.out.println(element);
}
}
}
Isso produzirá o seguinte resultado -
Resultado
1.9
2.9
3.4
3.5
Passando Arrays para Métodos
Assim como você pode passar valores de tipo primitivo para métodos, também pode passar arrays para métodos. Por exemplo, o método a seguir exibe os elementos em umint array -
Exemplo
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
Você pode invocá-lo passando um array. Por exemplo, a seguinte instrução invoca o método printArray para exibir 3, 1, 2, 6, 4 e 2 -
Exemplo
printArray(new int[]{3, 1, 2, 6, 4, 2});
Retornando um Array de um Método
Um método também pode retornar uma matriz. Por exemplo, o método a seguir retorna uma matriz que é a reversão de outra matriz -
Exemplo
public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
result[j] = list[i];
}
return result;
}
A classe Arrays
A classe java.util.Arrays contém vários métodos estáticos para classificar e pesquisar arrays, comparar arrays e preencher elementos de array. Esses métodos são sobrecarregados para todos os tipos primitivos.
Sr. Não. | Método e Descrição |
---|---|
1 | public static int binarySearch(Object[] a, Object key) Pesquisa o array especificado de Object (Byte, Int, double, etc.) para o valor especificado usando o algoritmo de pesquisa binária. A matriz deve ser classificada antes de fazer esta chamada. Isso retorna o índice da chave de pesquisa, se estiver contido na lista; caso contrário, retorna (- (ponto de inserção + 1)). |
2 | public static boolean equals(long[] a, long[] a2) Retorna verdadeiro se as duas matrizes de longos especificados forem iguais uma à outra. Duas matrizes são consideradas iguais se ambas as matrizes contiverem o mesmo número de elementos e todos os pares de elementos correspondentes nas duas matrizes forem iguais. Isso retorna verdadeiro se as duas matrizes forem iguais. O mesmo método pode ser usado por todos os outros tipos de dados primitivos (Byte, short, Int, etc.) |
3 | public static void fill(int[] a, int val) Atribui o valor int especificado a cada elemento da matriz especificada de ints. O mesmo método pode ser usado por todos os outros tipos de dados primitivos (Byte, short, Int, etc.) |
4 | public static void sort(Object[] a) Classifica a matriz especificada de objetos em ordem crescente, de acordo com a ordem natural de seus elementos. O mesmo método pode ser usado por todos os outros tipos de dados primitivos (Byte, short, Int, etc.) |