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.)