Buscar

POO 13 vetores

Prévia do material em texto

VETORES
Thaís Alves Burity Rocha
Agenda
 Definição
 Declaração
 Inicialização
 Acesso
 Outra versão do laço de repetição for
 Vetores Multidimensionais
 Var-args
 API de Java
 Método main
Vetores: Conceito
 Representa uma coleção homogênea de dados
 Todos os elementos são do mesmo tipo
 Em Java
 São objetos
 Elementos podem ser de tipo referenciado ou primitivo
 Possuem tamanho fixo depois de criados
 Atributo length
Vetores: Declaração
 O vetor ainda não existe na memória
 Apenas existe a variável de referência que poderá
apontar para um vetor do tipo declarado!
int[] a; 
double[] x;
double y[]; //correto, porém menos legível
Cliente[] clientes; 
Vetores: Declaração e Criação
 A maneira mais convencional é utilizar o operador
new
 Um pouco diferente da criação de outros objetos
 Requer a especificação de tamanho
 Elementos são inicializados com valor default do tipo
int[] a = new int[4];
Primeiro item: a[0]
Último item: a[3]
Heap
a 0 0 0 0
Vetores: Criação
 O tamanho do vetor pode ser definido por uma
variável ou expressão numérica
 O tamanho pode ser definido de forma dinâmica
 O tamanho não pode ser alterado
int tamanho = 32768;
byte[] vetor1 = new byte[tamanho];
double[] vetor2 = new double[tamanho*2];
boolean[] respostas = new boolean[12];
respostas = new boolean[144];
Vetores: Inicialização e Acesso
 Uma vez que o vetor foi criado, seus elementos
podem ser acessados através do índice
 Valor inteiro não-negativo
 Intervalo [0, n-1], sendo n = total de elementos
double[] salarios = new double[5];
for (int i = 0; i<5; i++){
salarios[i] = i*1000;
}
Vetores: Acesso Inválido
 Se é feito acesso a um elemento indefinido de um 
vetor, é gerado um erro em tempo de execução
 ArrayIndexOutOfBoundsException
String[] nomes = new String[3];
nomes[0] = “José”;
nomes[1] = “João”;
nomes[2] = “Maria”;
System.out.println(nomes[5]);
Vetores: Declaração, Criação e 
Inicialização Combinadas
 É possível declarar, criar e atribuir valor aos
elementos do vetor em uma única operação
int[] primosPequenos = {2, 3, 5, 7};
String[] cores = {"Vermelho", "Azul", "Amarelo"};
Heap
primosPequenos
2 3 5 7
“Vermelho” “Azul” “Amarelo”cores
Vetores: Acesso Usando for Melhorado
 Existe uma outra versão do for, que facilita a 
operação de percorrer os elementos de um vetor
double[] numeros = {1.1,1.2,1.3,1.4,1.5};
for (int i = 0; i< numeros.length; i++){
System.out.println(numeros[i]);
}
double[] numeros = {1.1,1.2,1.3,1.4,1.5};
for (double n: numeros){
System.out.println(n);
}
n guarda o valor do 
elemento corrente
Vetores Anônimos
public class Calculadora{
public int somaVetor(int[] vetor){
int resultado = 0;
for(int i=0; i<vetor.length; i++){
resultado += vetor[i];
}
return resultado;
}
public static void main(String[] args){
Calculadora calc = new Calculadora();
int soma = calc.somaVetor(new int[]{7,7,8,2,5});
}
}
Não é necessário
ter uma variável
de referência para
passar o vetor
como parâmetro!
Vetores de Objetos
 Armazenam referências para objetos de um 
determinado tipo
 Devem ser alocados da mesmo forma que vetores
de tipos primitivos
 Por default, cada elemento no vetor é inicializado
com null
Vetores de Objetos
Conta[] contas = new Conta[20];
contas 0 1 2 19
null null
…
contas[0] = new Conta(“111”,40);
contas 0 1 2 19
nullnull
…
Vetores Multidimensionais
 São vetores com 2 ou mais dimensões
 São úteis para representar matrizes
 O primeiro valor entre colchetes representa a linha e o 
segundo, a coluna
Coluna 0 Coluna 1 Coluna 2 Coluna 3
Linha 0 a[0][0] a[0][1] a[0][2] a[0][3]
Linha 1 a[1][0] a[1][1] a[1][2] a[1][3]
Linha 2 a[2][0] a[2][1] a[2][2] a[2][3]
Vetores Multidimensionais
 Declaração, criação e inicialização
 Acesso
int[][] a = new int[3][4];
int[][] b = { {1,2}, {3,4} };
b[0][1] = 19;
b[1][0] = -1;
b[1][4] = 10;
Vetores Multidimensionais Irregulares
 A quantidade de colunas não é igual em todas as 
linhas
 Java trata vetores multidimensionais como vetores
de vetores
 Um vetor onde cada elemento é um vetor
 No caso de matriz, um vetor onde cada elemento é um 
vetor unidimensional
Vetores Multidimensionais Irregulares
0
1
2
3
4
7 1 5 8 3 6
5 11 2
7
12 7 6 9
6 9 4 5 5 10 4 1
int[][] vetor = { {7,1,5,8,3,6},
{5,11,2},
{7}, 
{12,7,6,9},
{6,9,4,5,5,10,4,1} };
vetor
Vetores Multidimensionais Irregulares
 Declaração
 Acesso
int[][] a = new int[3][];
int[][] b = { {1,2,3}, {4,5} };
a[0] = new int[5];
a[0][3] = 4;
a[1][1] = 5;
b[1][1] = -1;
Var-args: Introdução
 Em regra geral, parâmetros são identificados por
tipo e nome, e são separados por vírgula
 Se há muitos, a declaração do método fica enorme
 Nem sempre é possível prever a quantidade
int somar(int a, int b){
return a+b;
}
int somar(int a, int b, int c){
return a+b+c;
}
int somar(int a, int b, int c, int d){
return a+b+c+d;
}
Var-args: Conceito e Declaração
 Define uma lista de argumentos de tamanho
variável
 Os argumentos são armazenados e acessados como
vetor
int somar(int... a){
int soma = 0;
for(int item: a){
soma += item;
}
return soma;
}
Var-args: Uso
public class MinhaClasse{
int somar(int... a){
int soma = 0;
for(int item: a){
soma += item;
}
return soma;
}
public static void main(String[] args){
MinhaClasse obj = new MinhaClasse();
int soma = obj.somar(); //OK
soma = obj.somar(1,2);
soma = obj.somar(1,2,3,4,5);
soma = obj.somar(new int[]{7,8,9});
}
}
Var-args: Exemplo da API de Java
 Exemplo: System.out.printf()
 O primeiro argumento é a string de formatação
 Depois, o conteúdo para ser formatado (em uma ou
mais variáveis)
%d = decimal
%f = ponto flutuante
%s = String
%n = pular linha
System.out.printf("%d %f %s %n",23,2.3,"23");
System.out.println("23 "+"2.3 "+"23");
API de Java
 Provê classes que implementam o comportamento
de um vetor (com melhorias)
 ArrayList, Vector e LinkedList
 Elementos podem ser acessados pelo índice
 Só podem armazenar objetos
 Conceito de lista encadeada
ArrayList x Vetor
Operação ou
Propriedade
Vetor ArrayList
Tamanho
- Fixo (alocação estática de 
memória)
- Atributo length: capacidade
de armazenamento
- Variável (alocação
dinâmica de memória)
- Método size(): quantidade
de elementos armazenados
Inserção
- Limitada pelo tamanho
- Acesso direto aos elementos
por índice
- Não há limite
- Método add()
Remoção
- Atribuição de símbolo ou null
- Não muda o tamanho do 
vetor
- Método remove()
- Muda o tamanho do 
conjunto
Consulta - Loop para percorrer o vetor - Método contains()
API de Java
 Vector
 Equivalente à ArrayList, mas com suporte à 
sincronização (programação concorrente)
 LinkedList
 Melhor performance para ações de inserção e 
remoção
 Bastante usada para simular outras estruturas de 
dados (fila, pilha)
API de Java
 A lista sobre vetores deve ser resolvida com 
vetores
 No projeto pode ser utilizado ArrayList
 Na prova, deve ser usado o que for pedido na
questão
 Se a questão não especifica, pode usar o que quiser
 No mundo real
 O ideal é não tentar “reiventar a roda”: Se existe
uma solução bem consolidada para um problema, você
não deve dedicar tempo e esforço para recriá-la
Método Main
 O método main recebe como parâmetroum vetor
de String
 O vetor é percorrido como qualquer outro!
 Mas como o main recebe parâmetro, se ele é 
chamado automaticamente pela JVM?
public class Eco {
public static void main(String[] args){
for(String s: args){
System.out.println(s);
}
}
}
Método Main
 Valores são passados quando o programa vai ser
executado
 Em linha de comando
 Exemplo
 Compilar: javac Eco.java
 Executar: java Eco aula de poo 2013.2
java <nome do programa> <argumentos separados por espaço>
Classe que contém
o método main
Parâmetros para o main
Método Main
 No Eclipse
 Run > Run Configurations… > aba “(x)=Arguments” > 
seção “Program Arguments”
 Valores separados por espaço
Representação de String em Vetor
 A classe String contém um método que permite
obter uma representação da String em vetor
 char[] toCharArray()
 Exemplo
String palavra = “cachorro”;
char[] palavraVetor = palavra.toCharArray();
for(char i: palavraVetor){
System.out.print(i + “ ”);
}

Continue navegando