Hiromiti Nakagawa – Treinamento Java Básico
Julho, 2013
Java Básico
© 2009 IBM Corporation
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
2 © 2009 IBM Corporation
Estruturas de dados
Collections (Coleções)
– Framework que implementa as estruturas de dados mais usadas no Java
– Fazem parte do pacote [Link].*
– Classes possuem métodos para adicionar objetos, remover objetos, encontrar um
objeto, iterar pela coleção, ver o tamanho, etc
– Interface Collection
• Lists: listas de objetos
• Sets: coleção de objetos sem repetição
• Queues: fila (first-in first-out)
• Stacks: pilha (first-in last-out)
– Interface Map
• Maps: mapeamento de um identificador único por objeto
3 © 2009 IBM Corporation
Estruturas de dados
equals()
– Método usado para comparar dois objetos pelo seu conteúdo
– Operador == compara os endereços dos objetos e não seu conteúdo
– Deve ser sobreescrito quando se usa estruturas de dados que comparam os objetos
hashCode()
– Método que gerar um código que permite identificar o objeto
– Não necessariamente precisa gerar códigos únicos
4 © 2009 IBM Corporation
Estruturas de dados
Ordered
– É possível iterar através da coleção em uma ordem específica (não randômica)
– Pode ser pelo índice, pela ordem de inserção, pelo instante de inserção, etc
– Não é ordenado pelo “valor” do objeto
Sorted/Unsorted
– Ordenação dos elementos da coleção é determinada por regras
– Ordenação baseia-se nas propriedades do objeto
– Natural order:
• String: A, B, C, D, E, F… Ordem alfabética
• Integer: ... -2, -1, 0, 1, 2, 3, 4, 5… Valor numérico
• Outros objetos: é preciso implementar a interface Comparable para definir qual é a
ordenação natural desses elementos
5 © 2009 IBM Corporation
Estruturas de dados
6 © 2009 IBM Corporation
Estruturas de dados
7 © 2009 IBM Corporation
Estruturas de dados
Interface List
– Principal característica: índice
– Ordem é mantida com base na posição do elemento
– Métodos para trabalhar com índices:
• get(int index), indexOf(Object o), add(int index, Object o)
– Elementos são inseridos:
• No final
• Ou na posição especificada
– ArrayList
• Array “dinâmico”
• Iteração rápida
• Acesso aleatório rápido
• Não é bom quando se tem muitas inserções ou deleções
• Ordenado pelo índice do elemento, mas não é sorted
8 © 2009 IBM Corporation
Estruturas de dados
– Vector
• Praticamente igual a ArrayList
• Sincronizado (thread-safe)
• Performance é mais lenta devido à sincronização
• Ordenado pelo índice do elemento, mas não é sorted
– LinkedList
• Lista duplamente ligada
• Permite adicionar ou remover elementos do início ou do fim da lista
• Ordenado pelo índice do elemento, mas não é sorted
• Pode ser usado como Fila (peek(), poll(), offer()) ou Pilha
• Iteração é mais lenta que no ArrayList
• Performance é melhor que ArrayList quando se tem muitas inserções e deleções
9 © 2009 IBM Corporation
Estruturas de dados
1 © 2009 IBM Corporation
0
Estruturas de dados
Interface Set
– Principal característica: não permite repetições
– Utiliza o método equals() para saber se dois objetos são iguais ou não
– HashSet
• Não possui nenhuma ordem
• Não é sorted
• Utiliza o método hashCode() para gerar o hash code do objeto
– LinkedHashSet
• Mantém os elementos na ordem em que foram inseridos
• Não é sorted
• Utiliza o método hashCode() para gerar o hash code do objeto
– TreeSet
• Implementa a estrutura de árvore Vermelha-Preta
• Sorted: ascendente de acordo com a ordem natual
1 © 2009 IBM Corporation
1
Estruturas de dados
1 © 2009 IBM Corporation
2
Estruturas de dados
Interface Queue
– Principal característica: first-in, first-out
– Ordenado pela sequência de inserção
– Muito usada para implementar listas de to-dos
(tarefas)
– PriorityQueue
• Prioriza elementos: primeiro a sair é o
mais prioritário
• Ordena elementos pela ordem natural ou
com base em um Comparator
– LinkedList
1 © 2009 IBM Corporation
3
Estruturas de dados
1 © 2009 IBM Corporation
4
Estruturas de dados
Interface Map
– Principal característica: mapeia uma chave única a um objeto
– Chave precisa ser um objeto
– Utiliza o método equals() para comparar as chaves
– HashMap
• Não ordenado
• Não é sorted
• Utiliza o hashCode() do objeto usado como chave
• Permite uma única chave null e vários elementos null
– Hashtable
• Praticamente igual a HashMap
• Sincronizado (thread-safe)
• Performance é mais lenta devido à sincronização
• Não permite null
1 © 2009 IBM Corporation
5
Estruturas de dados
– LinkedHashMap
• Mantem a ordem de inserção das chaves
• Mais lento que HashMap para adicionar e remover elementos
• Melhor que o HashMap para iterar
– TreeMap
• Sorted: ascendente de acordo com a ordem natual
1 © 2009 IBM Corporation
6
Estruturas de dados
1 © 2009 IBM Corporation
7
Estruturas de dados
1 © 2009 IBM Corporation
8
Estruturas de dados
Classes utilitárias
– Arrays
• asList()
• binarySearch()
• copyOf()
• equals()
• fill()
• sort()
• toString()
• Etc…
– Collections
• binaryList()
• fill()
• max()
• min()
• reverse()
• shuffle()
• Etc…
1 © 2009 IBM Corporation
9
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
2 © 2009 IBM Corporation
0
Generics
Generics
– Introduzido no Java 5
– Auxilia a criação de código mais fácil de ler e entender
– Diminui a ocorrência de erros em tempo de execução devido à desuniformidade do tipo
dos elementos de uma coleção (ClassCastException)
– Permite definir o tipo de dados (tipar) de uma coleção
– Compilador passa a verificar em tempo de compilação se os tipos batem
2 © 2009 IBM Corporation
1
Generics
Generics
2 © 2009 IBM Corporation
2
2 © 2009 IBM Corporation
3
Generics
Generics
– É possível utilizar Generics em qualquer classe para torná-la genérica
2 © 2009 IBM Corporation
4
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
2 © 2009 IBM Corporation
5
I/O
I/O – Entrada/Saída utiliza classes do pacote [Link].*
– Fluxos de dados (streams), serialização, sistemas de arquivos
[Link]
– Novo conjunto de classes para fazer I/O
– Não será abordado
2 © 2009 IBM Corporation
6
I/O
File
– Representação abstrata de um arquivo ou diretório do sistema de arquivos
– Fornece métodos para
• verificar se o arquivo/diretório existe
• obter o caminho completo do arquivo/diretório
• criar ou remover arquivo/diretório
• listar todos os arquivos dentro de um diretório
• verificar as propriedades de um arquivo
• etc
– Utiliza o encoding UTF
– Normalmente não é usada para fazer acesso aos dados, apenas manipulação de
arquivos/diretórios
2 © 2009 IBM Corporation
7
I/O
Streams
– Representa um fluxo de dados que podem vir de diversas fontes de dados como
arquivos, rede de dados ou um dispositivo conectado ao computador
– Stream de entrada e de Saída
– InputStream (para entrada de dados) e OutputStream (para saída de
dados) são as classes base
– Stream de baixo nível
• Trabalham com bytes de dados, lendo e escrevendo bytes
• Dificulta a manipulação
• FileInputStream e FileOutputStream
• ByteArrayInputStream, ByteArrayOutputStream
• PipedInputStream e PipedOutputStream
– Stream de alto nível
• Leem e escrevem dados em formato geral (Strings e primitivos)
• Utilizam stream de baixo nível para acessar os dados
• DataInputStream e DataOutputStream
• BufferedInputStream e BufferedInputOutputStream
2 © 2009 IBM Corporation
8
I/O
FileReader e FileWriter
– Fazem leitura e escrita de dados no formato Unicode
– Low-level
– Pode-se ler/escrever um único caracter, um número fixo de caracteres ou todo o fluxo
de caracteres
BufferedReader e BufferedWriter
– Lê/escreve uma grande quantidade de dados de uma única vez
– São mais eficientes e fáceis de usar
– Utiliza buffer para armazenar dados, minimizando o número de operações de
leitura/escrita
– Fornece métodos como:
• readLine()
• newLine()
PrintWriter
– Simplifica a instanciação dos objetos necessários definindo vários construtores
– Possui métodos como: format(), printf(), append()
– Flexível e poderoso
2 © 2009 IBM Corporation
9
I/O
FileReader e FileWriter
3 © 2009 IBM Corporation
0
I/O
BufferedReader e
BufferedWriter
3 © 2009 IBM Corporation
1
I/O
PrintWriter
3 © 2009 IBM Corporation
2
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
3 © 2009 IBM Corporation
3
Exercícios
Criar uma classe Node que possui um atributo chamado “valor” do tipo inteiro e dois .
atributos do tipo Node chamados “esquerda” e “direita”. Crie os métodos get e set para
esses atributos
Fazer override dos métodos hashCode() e equals() para retornar valores com base no
hashCode() e equals() do atributo “valor”
Criar uma classe chamada Arvore que possui um atributo chamado “raiz” do tipo Node.
Criar o método inserirElemento(Integer i) que faz a inserção do elemento na árvore. Esse
método deve percorrer os nós da árvore até encontrar um ramo “vazio” (null) em que o valor
possa ser inserido. A regra para inserção dos elementos é a seguinte: se o valor do
elemento for menor ou igual ao valor do nó atual, insere no ramo “esquerda” do nó, caso
contrário, inserir no ramo “direita” do nó.
3 © 2009 IBM Corporation
4
Exercícios
Criar uma classe chamada Main que tem o método main() e instancia uma Arvore e insere
elementos nessa árvore. Inserir na sequencia: 13, 8, 17, 1, 11, 25, 15, 6, 22, 27
Crie um método na classe Arvore que permita imprimir os elementos da seguinte forma:
13 8 17 1 11 15 25 6 22 27
Obs.: Para facilitar, pode imprimir todos os elementos numa única linha
Crie um método na classe Arvore
que permita imprimir os elementos
da seguinte forma:
13 8 1 6 11 17 15 25 22 27
3 © 2009 IBM Corporation
5
3 © 2009 IBM Corporation
6
3 © 2009 IBM Corporation
7
3 © 2009 IBM Corporation
8
3 © 2009 IBM Corporation
9
4 © 2009 IBM Corporation
0
4 © 2009 IBM Corporation
1
4 © 2009 IBM Corporation
2
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
4 © 2009 IBM Corporation
3
Treinamento Java Básico
Agenda
Estruturas de dados
Generics
I/O
Exercícios
Dúvidas
Avaliação
4 © 2009 IBM Corporation
4