Escolar Documentos
Profissional Documentos
Cultura Documentos
Um pouco de histria...
int meuDiaNascimento, meuMesNascimento, meuAnoNascimento; int seuDiaNascimento, seuMesNascimento, seuAnoNascimento; Em nvel conceitual, tudo faz parte de uma data.
Exemplo Pascal:
Data = record dia, mes, ano: integer; end;
Em Java:
public class Data { int dia; int mes; int ano; } Data meuNascimento, seuNascimento;
Objetos e Classes
Classe com seus atributos (Data com dia, ms e ano) Objeto uma instncia da classe (meuNascimento)
Porm, ainda h que se definir mtodos, pois como est qualquer valor inteiro pode ser atribudo s variveis membro (atributos).
Criao de um objeto
so acessados por meio de um manipulador (handle), atravs do qual lhe so enviadas mensagens. Ex.: lulu = new Cachorro(); // lulu o handle do novo objeto esto todos na heap (alocados dinamicamente) no tem tempo de vida determinado pelo programador no tem escopo, na verdade, so todos visveis a partir de um manipulador que tem escopo e tempo de vida quando no existem mais referncias para um objeto ele automaticamente retirado da memria (garbage collection)
Declarao do handle
Ex.:
Instanciao
Objetos
Integer b = new Integer(10); // b um handle de objeto int c = b.intValue();
Tipos primitivos ficam na stack (mundo do programa) Objetos ficam na heap (mundo dos objetos)
Containers
Matrizes ArrayList HashMap
Matrizes
Declarao
tipo[] nome; // cria a varivel, mas no aloca memria nome = new tipo[tamanho]; // aloca memria Obs.: A alocao de memria feita em tempo de execuo, logo, o tamanho das matrizes pode ser calculado durante a execuo do programa.
Exemplo
char[] m = new char[200];
Inicializao
int[] a = { 1, 2, 3, 4, 5}; int[][] b = { {1,2,3} {4,5,6} };
Exemplo: matrizes
// declarao de duas matrizes int[] vetInt1 = { 1, 3, 5, 7, 9, 11 }; int[] vetInt2 = new int[vetInt1.length * 2]; // loop de inicializao for( int i=0; i < vetInt1.length; i++) { vetInt2[i*2] = vetInt1[i]; vetInt2[i*2+1] = vetInt1[i] + 1; } // loop de impresso for( int i=0; i < vetInt2.length; i++) System.out.println(vetInt2[i]);
A classe ArrayList
ArrayList um array que pode mudar de tamanho depois de sua criao (+- lista dinamicamente encadeada) Assim como no array, os objetos so recuperados pela sua posio Principais mtodos add(Objeto) get(posio) remove(Objeto) int size() int indexOf(Objeto)
import java.util.*; ... ArrayList valores = new ArrayList(); valores.add (uma casa); valores.add (est limpa); for (int i=0; i < valores.size(); i++) { System.out.println( valores.get(i)); } Collections.sort(valores); // Exerc: repetir a impresso
A classe HashMap
Rpido acesso para consulta (no uma estrutura seqencial) Os objetos so recuperados por meio de uma chave de acesso
Para cada objeto h uma chave de entrada na tabela (mtodo hashValue determina o ponto de entrada - a classe Object implementa este mtodo, que pode ser sobre-escrito)
Os objetos no tem uma ordem Object put(ObjetoChave, Objeto) Object get(ObjetoChave) boolean containsValue(Objeto) Object remove(ObjectoChave) int size()
Principais mtodos
ExemploHash
HashMap dados = new HashMap(); ... do { cod = teclado.readLine(); if (! cod.equalsIgnoreCase("fim")) { nome = teclado.readLine(); dados.put(cod,nome); } } while (! cod.equalsIgnoreCase("fim")); do { cod = teclado.readLine(); nome = (String)dados.get(cod); if (nome != null) System.out.println(nome); } while (! cod.equalsIgnoreCase("fim"));
Exerccios
calcular S = (A[1] * B[10]) + (A[2] * B[9]) + ... calcular C, sendo C[i] = A[i] / B[i], e imprimi-lo invertido imprimir os nmeros pares de A (considerando a parte inteira dos nmeros)
Fazer um programa que leia vrias linhas (at ser digitado fim) e as imprima na ordem inversa da digitao Fazer um programa que leia o nmero da conta corrente de clientes e seus nomes. Depois, para cada nmero digitado, imprima o nome do correntista.
Resumo
String x StringBuffer
String[] vs = new String[10] vs[3] = teste ArrayList al = new ArrayList() Float f = (Float)al.get(2) Iterator i = al.iterator() i.next(); i.next() Float f = (Float) i.next();
Quando usar matriz, ArrayList ou HashMap? Existem outros containers no pacote java? Pode-se definir novos containers baseados nos existentes?