Aprendizado de Arrays em Java

Arrays

  • Um array é uma coleção ordenada de dados do mesmo tipo
  • Representa diversos valores do mesmo tipo organizados sequencialmente
  • Cada elemento do array pode ser acessado por meio de um índice
public class ExemploArray01 {
    public static void main(String[] args) {
        // Tipo da variável    Nome da variável    =  Valor da variável
        int[] numeros;   // Declaração de um array de inteiros

        numeros = new int[10]; // Criação do array
        
        for (int i = 0; i < numeros.length; i++) {
            numeros[i] = i+1;
            System.out.print(numeros[i]+"\t");
        }

    }
}



Resultado da execução:

1	2	3	4	5	6	7	8	9	10	


Características dos Arrays:

  • O tamanho é fixo e não pode ser alterado após a criação
  • Todos os elementos devem ser do mesmo tipo
  • Pode conter qualquer tipo de dado, incluindo tipos primitivos e referências
  • As variáveis que referenciam arrays são do tipo referência, sendo os próprios arrays objetos armazenados na memória heap do Java, portanto o objeto array reside na heap

O comprimento de um array é obtido com array.length, então o maior índice válido é array.length-1; tentar acessar além disso resultará em uma exceção: ArrayIndexOutOfBoundsException

Uso de Arrays

exemplo04

  • Laços for tradicionais
  • Laços for-each
  • Passagem de arrays como parâmetros
  • Retorno de arrays de métodos
public class ExemploArray04 {
    public static void main(String[] args) {
        // Declaração de um array
        int[] arrays = {1, 3, 4, 5, 6,};

        // JDK 1.5    sem uso de índices
        // Loop for-each
        for (int array : arrays) {
            System.out.println(array);
        }

        // Chamada de métodos
        imprimirArray(arrays);

        int[] invertido = inverterArray(arrays);
        imprimirArray(invertido);

    }


    // Passagem de array como parâmetro
    public static void imprimirArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);

        }
    }
    // Retorno de array de método
    public static int[] inverterArray(int[] arrays) {
        int[] resultado = new int[arrays.length];
        // Operação de inversão
        for (int i = 0, j = resultado.length - 1; i < arrays.length; i++, j--) {
            resultado[j] = arrays[i];
        }


        return resultado;
    }

}



Resultado da execução:

1	3	4	5	6	
===============================
1	3	4	5	6	
===============================
6	5	4	3	1	



Arrays Multidimensionais

public class ExemploArray05 {
    public static void main(String[] args) {

        int[][] arrays = {{1}, {3,2,3,5}, {4, 5, 6}};

        for (int[] array : arrays) {
            for (int i : array) {
                System.out.print(i + " ");

            }

        }
    }

}


Ordenação por Bolha (Bubble Sort)

A ordenação por bolha é uma das técnicas de ordenação mais conhecidas, sendo uma das oito principais formas de ordenar dados.

public class ExemploArray07 {
    public static void main(String[] args) {

       // Ordenação por bolha: compara elementos adjacentes de um array e troca se necessário.
        // A cada iteração, um elemento máximo ou mínimo é colocado corretamente.
        // Reduz o número de comparações nas próximas iterações!
        // Um ciclo completo até a conclusão!
        int[]  a = {6,3,6776,434,221,2,3,};
        int[] b = ordenar(a);
        System.out.println(Arrays.toString(b));

    }
    
    public static int[] ordenar(int[] array){
        int temp;
        // Loop externo, determinando quantas iterações serão feitas
        for (int i = 0; i < array.length-1; i++) {
            // Otimização
            boolean sinalizador = false;

            // Verificação de ordem
            for (int j = 0; j < array.length-1-i; j++) {
                /*
                Se a condição for: array[j]>array[j+1], os maiores valores irão para o final
                Se a condição for: array[j+1]>array[j], os menores valores irão para o final
                 */
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    sinalizador = true;
                }

                }
            if(!sinalizador){
                break;
            }
            
        }
        
        return array;
        
    }

}


Resultado da execução:

[2, 3, 3, 6, 221, 434, 6776]


Arrays Esparsos

  • Quando um array possui muitos elementos iguais a zero ou a um único valor, pode-se utiilzar uma representação esparsa.
  • O tratamento de arrays esparsos envolve:
  • Registrar o número de linhas e colunas e o total de elementos distintos
  • Armazenar em uma estrutura menor os índices e valores dos elementos diferentes de zero
public class ExemploArray08 {
    public static void main(String[] args) {

        // Criar um array bidimensional 11x11   0:sem peça   1:peça preta    2:peça branca
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        System.out.println("Imprimir array original");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");

            }
            System.out.println();

        }

        System.out.println("=========================================");
        System.out.println("Criar array esparsa");
        // Contar elementos não-zero
        int soma = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j] != 0) {
                    soma++;
                }

            }


        }
        System.out.println("soma:" + soma);
        // Criar array esparsa
        int[][] array2 = new int[soma + 1][3];
        array2[0][0] = 11;  // Número de linhas do array original
        array2[0][1] = 11;  // Número de colunas do array original
        array2[0][2] = soma;
        int contador = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j] != 0) {
                    contador++;
                    array2[contador][0] = i;
                    array2[contador][1] = j;
                    array2[contador][2] = array1[i][j];

                }

            }


        }
        System.out.println("Imprimir array esparsa");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0] + "\t" + array2[i][1]+"\t" + array2[i][2]);

        }
        System.out.println("================================");
        System.out.println("Restaurar array original a partir do esparsa");
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i <array2.length ; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];

        }
        // Imprimir array restaurado
        for (int i = 0; i < array3.length; i++) {
            for (int j = 0; j < array3[i].length; j++) {
                System.out.print(array3[i][j] + "\t");

            }
            System.out.println();

        }

    }
}



Imprimir array original
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
=========================================
Criar array esparsa
soma:2
Imprimir array esparsa
11	11	2
1	2	1
2	3	2
================================
Restaurar array original a partir do esparsa
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	


Tags: java Arrays programação Algoritmos ordenacao

Publicado em 9-3 09:44