Você está na página 1de 4

12-Oct-07

Licena para uso e distribuio Este material est disponvel para uso nocomercial e pode ser derivado e/ou distribudo, desde que utilizando uma licena equivalente.
Atribuio-Uso No-Comercial-Compatilhamento pela mesma licena, verso 2.5

Desenvolvimento Orientado a Objetos com Java


Captulo 11 Utilidades
Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.

http://creativecommons.org/licenses/by-nc-sa/2.5/deed.pt
Voc pode copiar, distribuir, exibir e executar a obra, alm de criar obras derivadas, sob as seguintes condies: (a) voc deve dar crdito ao autor original, da forma especificada pelo autor ou licenciante; (b) voc no pode utilizar esta obra com finalidades comerciais; (c) Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idntica a esta.

2
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Objetivos deste captulo Apresentar utilitrios presentes na API Java; Mostrar como muito cdigo til no precisa ser desenvolvido pelo programador, bastando utilizar classes j prontas; Focar nas colees, datas e formatadores, mencionando outras utilidades e as classes que as implementam.

Colees Grupos de objetos so muito utilizados em nossos programas; Uso de vetores traz uma restrio: tamanho limitado; Java oferece diversas classes que implementam colees no pacote java.util; As principais:
Listas; Conjuntos; Mapeamentos (mapas).
3 4
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Maio 2006

Desenvolvimento Orientado a Objetos com Java

API Collection A API de colees est presente desde os primrdios, evoluindo a cada verso; Vantagens de us-la:
Reutilizar cdigo j pronto e bastante testado; Usar cdigo que todos os desenvolvedores usam; No se preocupar com o tamanho da coleo.

API Collection
Collection

List

Set

ArrayList LinkedList

HashSet

TreeSet

Desvantagem:
Sem uso de tipos genricos (prximo captulo), no h como restringir a classe do objeto adicionado e necessrio fazer downcast toda vez que quiser ler.
5
Maio 2006 Desenvolvimento Orientado a Objetos com Java Maio 2006

Map

Iterator

HashMap

TreeMap

Para simplificar, muitas outras classes no foram mostradas.


6

Desenvolvimento Orientado a Objetos com Java

12-Oct-07

Listas Colees indexadas (ordem importante):


ArrayList: usa vetores (desempenho melhor); LinkedList: usa lista encadeada (til para algumas situaes).

Listas
import java.util.*; public class Teste { public static void main(String[] args) { List impares = new ArrayList(); impares.add(1); impares.add(3); impares.add(5); List pares = new LinkedList(); pares.add(2); pares.add(4); pares.add(6); for (int i = 0; i < impares.size(); i++) System.out.println(impares.get(i)); for (int i = 0; i < pares.size(); i++) System.out.println(pares.get(i)); 7 }
Maio 2006

Mtodos principais:
add(Object), add(int, Object), addAll(Collection); clear(), remove(int), removeAll(Collection); contains(Object), containsAll(Collection); get(int), indexOf(Object), set(int, Object); isEmpty(), toArray(), subList(int, int), size().
Maio 2006 Desenvolvimento Orientado a Objetos com Java

} 8
Desenvolvimento Orientado a Objetos com Java

Conjuntos Colees no indexadas sem duplicao (no pode haver dois objetos iguais):
HashSet: usa tabela hash; TreeSet: usa rvore e ordenado (Comparable).

Iteradores Em conjuntos, no h um mtodo para obter o objeto pelo ndice, pois no h ndice; Para acessar os elementos de conjuntos, usamos iteradores:
Obtido via mtodo iterator(); Mtodos: hasNext(), next() e remove().

Mtodos principais:
add(Object), addAll(Collection); clear(), remove(int), removeAll(Collection), retainAll(Collection); contains(Object), containsAll(Collection); isEmpty(), toArray(), size().
9
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Funciona tambm para listas e outras colees.

10
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Conjuntos
import java.util.*; public class Teste { public static void main(String[] args) { Set numeros = new HashSet(); numeros.add(1); numeros.add(2); numeros.add(3); Set outros = new TreeSet(); outros.add(3); outros.add(2); outros.add(1); Iterator i; for (i = numeros.iterator(); i.hasNext();) System.out.println(i.next()); for (i = outros.iterator(); i.hasNext();) System.out.println(i.next()); }
Maio 2006

Novo loop for A partir do Java 5.0, surgiu uma nova sintaxe para laos que usam iteradores; Maior redigibilidade e legibilidade use sempre que possvel! Fica ainda melhor com tipos genricos...
for (Object o : numeros) System.out.println(o); for (Object o : outros) System.out.println(o);
11
Desenvolvimento Orientado a Objetos com Java Maio 2006 Desenvolvimento Orientado a Objetos com Java

} 12

12-Oct-07

Mapeamentos (mapas) Colees de pares chave x valor, sem duplicao de chave:


HashMap: usa tabela hash; TreeMap: usa rvore e ordenado (Comparable).

Mapeamentos (mapas)
import java.util.*; public class Teste { public static void main(String[] args) { Map mapa = new HashMap(); mapa.put(1, "Um"); mapa.put(2, "Dois"); mapa.put(3, "Trs"); for (Object o : mapa.keySet()) System.out.println(o + " = " + mapa.get(o)); } }

Mtodos principais:
clear(), remove(Object); containsKey(Object), containsValue(Object); isEmpty(), size(); put(Object, Object), get(Object), putAll(Map); entrySet(), keySet(), values().
13
Maio 2006 Desenvolvimento Orientado a Objetos com Java

14
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Ordenao de colees Java j implementa algoritmo de ordenao:


Colees ordenadas: TreeSet, TreeMap; Collections.sort() para colees; Arrays.sort() para vetores.

Enumeraes Tipos enumerados so aqueles que possuem um conjunto finitos de valores que as variveis podem assumir:
Ex.: estaes do ano, naipes ou cartas do baralho, planetas do sistema solar, etc.

Para que a ordenao funcione, preciso que os objetos implementem a interface Comparable (como vimos no captulo 7); As classes Arrays e Collections possuem outros mtodos teis: busca binria, cpia, mximo, mnimo, preenchimento, trocas, etc.
15
Maio 2006 Desenvolvimento Orientado a Objetos com Java

A partir do Java 5, a palavra-chave enum define um tipo enumerado:


enum ESTACAO { PRIMAVERA, VERAO, OUTONO, INVERNO };

20
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Datas Em Java, existem duas classes para manipulao de datas: Date e Calendar (java.util); java.util.Date:
Representa um instante do tempo com preciso de milisegundos como um nmero longo (ms passados de 01/01/1970 00:00:00 at aquela data); new Date() representa o instante atual, existe um construtor new Date(long); Mtodos before() e after() comparam datas; getTime() e setTime(long) obtm e alteram o valor interno da data.
21
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Datas java.util.Calendar:
Calendar.getInstance() obtm um calendrio; Um calendrio funciona com campos: YEAR, MONTH, DAY_OF_MONTH, DAY_OF_WEEK, HOUR, etc. set(int, int) atribui um valor a um campo; get(int) obtm o valor de um campo; add(int, int) adiciona um valor a um campo; getTime() e setTime(Date) alteram a data do calendrio.
Calendrios j calculam anos bissextos, trocas de hora, dia, ms, etc. Use-o sempre para manipular datas!
22
Maio 2006 Desenvolvimento Orientado a Objetos com Java

12-Oct-07

Datas
import java.util.*; import static java.util.Calendar.*; public class Teste { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(YEAR, 1981); cal.set(MONTH, JUNE); cal.set(DAY_OF_MONTH, 15); String[] dias = {"", "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"}; int diasem = cal.get(DAY_OF_WEEK); System.out.println(dias[diasem]); }
Maio 2006

Datas
// Dentro do main() // importando java.util.* e java.util.Calendar.* Calendar cal = Calendar.getInstance(); // Thu Jul 13 22:45:39 BRT 2006 cal.setTime(new Date()); System.out.println(cal.getTime()); // Wed Feb 13 22:45:39 BRST 2008 cal.add(YEAR, 2); cal.set(MONTH, FEBRUARY); System.out.println(cal.getTime()); // Sat Mar 01 22:46:19 BRT 2008 cal.add(DAY_OF_MONTH, 17); System.out.println(cal.getTime()); 23
Desenvolvimento Orientado a Objetos com Java Maio 2006 Desenvolvimento Orientado a Objetos com Java

} 24

Outras utilidades Integrao com o SO: Runtime e System (java.lang); Construo de strings com desempenho melhor: java.lang.StringBuffer; Operaes matemticas: java.lang.Math; Nmeros inteiros e decimais sem problemas de preciso: BigInteger e BigDecimal (java.math); Internacionalizao e regionalizao de aplicaes: java.util.Locale;
30
Maio 2006 Desenvolvimento Orientado a Objetos com Java

Outras utilidades Implementao do design pattern observador: Observer e Observable (java.util); Leitura de arquivos de propriedades ou do sistema: Properties e ResourceBundle (java.util); Gerao de nmeros aleatrios: java.util.Random; Identificador universal e nico para objetos: java.util.UUID; Manipulao de arquivos compactados: pacote java.util.zip.
Maio 2006 Desenvolvimento Orientado a Objetos com Java

31

Você também pode gostar