Array e ArrayList

Começar. É Gratuito
ou inscrever-se com seu endereço de e-mail
Rocket clouds
Array e ArrayList por Mind Map: Array e ArrayList

1. Arrays(vetores)

1.1. Declarando Arrays(vetores) em Java

1.1.1. A sintaxe da declaração e criação do array é a seguinte: tipo[ ] nome_do_array = new tipo[numero_de_elementos]; Ou: tipo[] nome_do_array = { valor1, valor2, ...,valorx};

1.1.1.1. float[] nota = new int[20]; float[] nota = {1,2,3,4,5,6,7,8,90.1,10.02,-11,12.9,13.7,14.5,15.7,16.0,17.5,19.3,20.2};

1.1.1.2. E o nome dos alunos, armazenaríamos em Strings: String[] nome = new String[20];

1.1.1.3. Se notar bem, estamos usando a palavra 'new', que é a mesma que usamos na classe Scanner, para criar um objeto. Aqui não é diferente. Estamos criando um objeto de arrays também.

1.1.1.4. Duas informações importantes: 1. Quando declaramos variáveis numéricas usando array e não inicializamos com valores, estes serão automaticamente nulos (0 ou 0.0). Se forem Strings, serão 'null' e vazias caso sejam caracteres (char). 2. O tamanho de um array é constante. Uma vez declarado seu valor, não poderá ser mudado. Se declarou 5 inteiros, o array terá sempre tamanho 5. Se quiser saber o tamanho de um array, use o método 'length', que está em todo objeto do tipo array e retorna um inteiro com o número de elementos em cada cada array: nome.length, nota.length etc

1.2. A ordem de numeração dos elementos

1.2.1. Por exemplo, se declaramos um array com o nome 'teste', de 3 elementos, seus elementos serão identificados por: teste[0] teste[1] teste[2] Logo, sempre que declaramos um array de 'n' índices, o índice desses valores vão de 0 até n-1. Guarde isso, é importante e usaremos sempre de agora em diante.

1.3. Como usar os elementos de um array em Java

1.3.1. double [] nota = new double[5]; nota[0]= 8; nota[1]=7.5; nota[2]=4.7; nota[3]=6.99; nota[4]=9.99;

1.3.2. Somar a nota de dois alunos: double soma = nota[3] + nota[4];

1.3.3. Incrementar: nota[5]++;

1.3.4. Enfim, pode fazer tudo. São variáveis do tipo double normais. A diferença é que os nomes das variáveis tem números, que são chamados, em programação, de índice, que são criados automaticamente quando você declara um bloco de vários elementos.

1.4. Exemplos de código Java usando Array

1.4.1. Exemplo 1: Faça um programa que peça 3 números inteiros ao usuário, armazene em um Array, depois mostre o valor de cada elemento do array, assim como seu índice. Passo 1: Primeiro declaramos um array de inteiros, contendo 3 elementos: int[] nota = new int[3]; Depois o objeto 'entrada', do tipo Scanner, para receber os valores do usuário. Passo 2: Armazenar os valores no array Note que, você é programador e sabe que os índices vão de 0 até 2. Mas o usuário não. Pro leigo, é número 1, número 2 e número 3, não inicia no 0. No laço for, o nosso 'indice' vai de 0 até 2. Porém, ao recebermos o valor de índice 'indice', estamos pedindo ao cliente o valor do número 'indice+1'. Por exemplo, para armazenar um valor no 'nota[0]', vamos pedir o número '0+1' ao cliente. Para armazenar um valor no 'nota[1]', vamos pedir o número '1+1' ao cliente. Para armazenar um valor no 'nota[2]', vamos pedir o número '2+1' ao cliente. Passo 3: exibindo os valores pro usuário Usaremos outro laço for para exibir o valor dos índices, que variam de 0 até 2. Porém, novamente, temos que mostrar 1 ao 3 pro cliente, pois pra ele não faz sentido 'número 0 -> valor 10 ' e sim 'número 1 -> valor 10'. Então, nosso código Java ilustrando o uso de Arrays será:

1.4.1.1. package Java; import java.util.Scanner; public class ArrayVetor { public static void main(String[] args) { float[] nota = new float[5]; Scanner entradateclado = new Scanner(System.in); System.out.println("Digite os numeros inteiros"); for (int i = 0; i < 3; i++) { System.out.print("Nota: "); float numeroDigitado = entradateclado.nextFloat(); nota[i] = numeroDigitado; System.out.println("Entra no Indice " + "[" + i + "]" + "=" + nota[i] + "\n"); } for (int i = 0; i < 3; i++) { System.out.println("Indice" + "[" + i + "]" + ": Nota: " + nota[i]); } } }

1.4.1.1.1. import java.util.Scanner; public class arrayTeste { public static void main(String[] args){ int[] nota = new int[3]; Scanner entrada = new Scanner(System.in); //recebendo os números for(int indice=0 ; indice < 3 ; indice++){ System.out.print("\nEntre com o número " + (indice+1) + ": "); nota[indice] = entrada.nextInt(); } //exibindo os números for(int indice=0 ; indice < 3 ; indice++){ System.out.printf("Número %d -> Valor armazenado: %d\n",indice+1, nota[indice]); } } }

1.4.2. Exemplo 2: Faça um aplicativo Java que peça o nome do aluno, receba duas notas e depois retorne todas essas informações junto com a média dele. Vamos usar, nesse exemplo, um array de floats com 3 elementos. Dois elementos para armazenar os valores da nota e o terceiro vai armazenar a média. O resto, não tem segredo. Veja como ficou nosso código Java:

1.4.2.1. import java.util.Scanner; public class arrayTeste2 { public static void main(String[] args){ float[] nota = new float[3]; String nome; Scanner entrada = new Scanner(System.in); System.out.print("Nome do aluno: "); nome = entrada.nextLine(); System.out.print("Primeira nota: "); nota[0] = entrada.nextFloat(); System.out.print("Segunda nota: "); nota[1] = entrada.nextFloat(); //média nota[2] = (nota[0] + nota[1])/2; System.out.printf("O aluno %s tirou %.1f e %.1f, obtendo média final %.2f",nome,nota[0],nota[1],nota[2]); } }

1.4.2.1.1. package Java; import java.util.Scanner; public class ArrayVetor2 { public static void main(String[] args) { String nome; double[] notas = new double[3]; double total = 0; double[] media = new double[3]; Scanner entradaTeclado = new Scanner(System.in); System.out.println("Digite o Nome do Aluno e abaixo as 3 notas"); System.out.print("Digite o Nome do Aluno: "); String nomeDigitado = entradaTeclado.nextLine(); nome = nomeDigitado; for (int i = 0; i < 3; i++) { System.out.print("Digite as Nota" + (i + 1) + ": "); double notasDigitado = entradaTeclado.nextDouble(); notas[i] = notasDigitado; media[0] = (notas[0] + notas[1] + notas[2]) / 3; total = media[0]; } System.out.println("\nNome: " + nome + "\tMédia: " + total); } }

2. Foreach: O laço for para Arrays

2.1. Vamos usar essa variante do for que percorre sempre, do começo ao fim, todos os elementos de um Array.

2.1.1. A sintaxe do for each é a seguinte: for ( tipo variavel_do_tipo_do_seuArray : seuArray){ //seu código } Se o 'seuArray' for de inteiro, ficaria: for (int count : seuArray){ ... }

2.2. Exemplo de uso do foreach em Java:

2.2.1. Crie um aplicativo em Java que peça 5 números ao usuário. Depois, mostre o resultado da soma desses números;

2.2.1.1. Passo 1: Vamos declarar o vetor de inteiro e o inteiro 'soma' para receber a soma dos resultados que o usuário fornecer. Usamos um laço for, convencional, para percorrer o array. Note que usamos 'numero.length', que é uma boa prática.

2.2.1.2. package Java; import java.util.Scanner; public class ForEachJava { public static void main(String[] args) { int[] numero = new int[5]; int soma = 0; int somando = 0; Scanner entradaTeclado = new Scanner(System.in); for (int i = 0; i < numero.length; i++) { System.out.print("Digite os Numero" + (i + 1) + " : "); numero[i] = entradaTeclado.nextInt(); soma += numero[i]; } System.out.println("A soma dos Numeros digitados: " + soma); for (int verSoma : numero) { System.out.println("\nVer como Foreach calcula:" + (somando += verSoma)); } } }

3. Estrutura de Dados

3.1. ArrayList são Arrays mais potentes, ou seja, são Arrays mas com utilidades (e complexidade) a mais.

3.1.1. Array: Um bloco de variáveis do mesmo tipo enumeradas em seqüência.

3.2. Estrutura de dados em Java: Lista Imagine uma lista, uma lista qualquer. A lista telefônica, por exemplo. Ela é um registro (e que registro) de dados. Como funciona? Como você usa? Não há meio certo para se usar. Você pode usar o começo da lista, o meio ou fim, ir e voltar. É simplesmente uma lista, uma exposição de informação ao seu dispor. Assim será em Java.

3.2.1. Estrutura de dados em Java: Fila Imagine uma fila de banco. Como ela funciona? (Na verdade, como ela deveria funcionar) De qualquer jeito, como uma 'lista'? Claro que não. Na fila, quem estiver na frente é atendido primeiro. Assim será na programação Java para estrutura de dados. Quando seus dados estiverem sob essa estrutura, as informações que estão na cabeça da fila serão tratadas primeiro, assim como as pessoas que estão na cabeça de uma fila de banco seriam atendidas primeiro.

3.2.1.1. Estrutura de dados em Java: Pilha Agora imagine uma pilha de pratos. Você comeu uma lasanha, e guardou o prato. Depois uma macarronada, e guardou o prato. Por fim, você comeu uma salada e guardou o prato. Agora você tem uma fila de pratos, que vai levar para a pia para lavar. Qual prato vai lavar primeiro? O primeiro, o da lasanha? Não! O último, o da salada, que está no topo da pilha. Assim será em seus aplicativos em Java: nas informações sob estrutura de pilha, as últimas informações (último prato) que chegaram - ou seja, as mais recentes-, serão os primeiros a serem tratadas (primeiros a serem lavados). Ou seja, é o oposto das filas. Aqui, os últimos que chegaram serão atendidos. Nas filas, os primeiros que chegaram é que são atendidos.

4. Array Multidimensional ou Matriz: Array de arrays

4.1. Imagem

4.1.1. Array Multidimensional ou Matriz: Array de arrays

4.1.1.1. Matriz

4.1.1.1.1. Matriz

4.2. Arrays de uma ou mais dimensões em Java

4.2.1. Veja tal array/vetor apenas como uma linha, assim terá a noção de dimensão. Por exemplo, vamos declarar um array unidimensional com 5 notas de Matemática: int[] notas = {8.0 , 7.5, 8.5 , 9.0 , 8.0}; Essa nota pode ser representada por uma matriz 1x5, ou seja, uma linha e 5 colunas: 8.0 7.5 8.5 9.0 8.0 Agora vamos representar as notas em Física, abaixo das de Matemática. Teremos uma matriz 2x5, ou seja, uma matriz de duas linhas e 5 colunas: 8.0 7.5 8.5 9.0 8.0 8.9 9.0 8.6 8.4 8.0 Agora vamos representar as notas de Química, abaixo das notas de Física. Teremos uma matriz 3x5, ou seja, uma matriz de três linhas e 5 colunas: 8.0 7.5 8.5 9.0 8.0 8.9 9.0 8.6 8.4 8.0 6.8 7.1 7.0 7.6 6.5

4.3. Matrizes: declarando vetores/arrays multidimensionais em Java

4.3.1. A sintaxe é exatamente a mesma do array normal, a diferença está no número de colchetes '[]' que irmos usar. No caso, usamos um par para cada dimensão. Por exemplo, para declarar a matriz 2x5 do exemplo anterior: float[][] notas = new float[2][5]; Ou float[][] notas = { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 } }; Para declarar a matriz 3x5 do exemplo anterior: float[][] notas = new float[3][5]; Ou float[][] notas = { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 }, {6.8, 7.1, 7.0, 7.6, 6.5 } }; Note que notas[0] se refere ao array de notas de Matemática. Note que notas[1] se refere ao array de notas de Física. Note que notas[2] se refere ao array de notas de Química. Por exemplo: qual foi a quarta nota de Física do aluno? Ora, o vetor de Física é notas[1], e a quarta nota é o elemento [3] desse array. Então a quarta nota de Física do aluno está armazenada em: nota[1][3], que é 8.4

4.4. Exemplos de códigos:

4.4.1. Exemplo 1: Crie um aplicativo em Java que peça ao usuário para preencher uma matriz 3x3 com valores inteiros e depois exiba essa matriz. A grande novidade, e importância, nesse tipo de aplicativo são os laços for aninhados, ou seja, um dentro do outro. Primeiro criamos um laço que vai percorrer todas as linhas da matriz. Podemos, e devemos, ver cada linha como um vetor de 3 elementos. Dentro de cada linha, temos que percorrer cada elemento do array e fornecer seu valor. Fazemos isso através de outro laço for, que ficará responsável pelas 'colunas', formando nossos laços aninhados. Para imprimir, o esquema é exatamente o mesmo. Imprimimos linha por linha, e em cada linha, imprimimos coluna por coluna.

4.4.1.1. package Java; import java.util.Scanner; public class matrizTeste1 { public static void main(String[] args) { int[][] matriz = new int[3][3]; Scanner entradaTeclado = new Scanner(System.in); for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { System.out.print("Digite M" + "[" + (linha + 1) + "]" + "[" + (coluna + 1) + "]: "); matriz[linha][coluna] = entradaTeclado.nextInt(); } System.out.println(); } for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { System.out.print(matriz[linha][coluna] + "\t\t"); } System.out.println(); } } }

4.4.1.1.1. import java.util.Scanner; public class matrizTeste { public static void main(String[] args){ int[][] matriz = new int[3][3]; Scanner entrada = new Scanner(System.in); System.out.println("Matriz M[3][3]\n"); for(int linha=0 ; linha < 3 ; linha++){ for(int coluna = 0; coluna < 3 ; coluna ++){ System.out.printf("Insira o elemento M[%d][%d]: ",linha+1,coluna+1); matriz[linha][coluna]=entrada.nextInt(); } } System.out.println("\nA Matriz ficou: \n"); for(int linha=0 ; linha < 3 ; linha++){ for(int coluna = 0; coluna < 3 ; coluna ++){ System.out.printf("\t %d \t",matriz[linha][coluna]); } System.out.println(); } } }

4.4.2. Exemplo 2: Crie um aplicativo em Java que peça ao usuário para preencher uma matriz 3x2 com valores inteiros e depois exiba essa matriz. No exemplo passado, o número de linhas era igual ao número de colunas, da matriz. Vamos usar um exemplo diferente, para você fixar seu conhecimento em arrays multidimensionais. Como dito no começo, uma matriz, array multidimensional ou vetor multidimensional nada mais é que um conjunto de arrays ou conjunto de vetores, array de arrays. Quando fazemos: int[5] para declarar um array de inteiros, estamos declarando 5 variáveis do tipo inteiro. Quando fazemos: int[10][5], estamos declarando 10 arrays, e em cada array desses existem 5 inteiros. Ou seja, 10 arrays do tipo do exemplo passado. Logo, o tamanho desse array – length – é 10. Você pode obter isso com o comando: array.length Assim, uma matriz 3x2 tem tamanho 3. Uma 4x3 tem tamanho 4, uma 10x123123 tem tamanho 10 etc. Ou seja, o length de arrays multidimensionais é o número de linhas.

4.4.2.1. package Java; import java.util.Scanner; public class matrizTeste2 { public static void main(String[] args) { int[][] matriz = new int[3][2]; Scanner entradaTeclado = new Scanner(System.in); for (int linha = 0; linha < matriz.length; linha++) { for (int coluna = 0; coluna < 2; coluna++) { System.out.print("Digite M" + "[" + (linha + 1) + "]" + "[" + (coluna + 1) + "]: "); matriz[linha][coluna] = entradaTeclado.nextInt(); } System.out.println(); } for (int linha = 0; linha < matriz.length; linha++) { for (int coluna = 0; coluna < 2; coluna++) { System.out.print(matriz[linha][coluna] + "\t\t"); } System.out.println(); } } }

5. Arrays em métodos: passagem por valor e passagem por referência

5.1. import java.util.Scanner; public class arrayPraMetodo { public static void exibeMatriz(int[][] Mat){ System.out.println("\nA Matriz ficou: \n"); for(int linha=0 ; linha < 3 ; linha++){ for(int coluna = 0; coluna < 3 ; coluna ++){ System.out.printf("\t %d \t",Mat[linha][coluna]); } System.out.println(); } } public static void main(String[] args){ int[][] matriz = new int[3][3]; Scanner entrada = new Scanner(System.in); System.out.println("Matriz M[3][3]\n"); for(int linha=0 ; linha < 3 ; linha++){ for(int coluna = 0; coluna < 3 ; coluna ++){ System.out.printf("Insira o elemento M[%d][%d]: ",linha+1,coluna+1); matriz[linha][coluna]=entrada.nextInt(); } } exibeMatriz(matriz); } }

5.2. Passagem por valor e passagem por referência