Prof. Jos Braz Prof. Patricia Macedo Prof. Jos Cordeiro Departamento de Sistemas e Informtica Escola Superior de Tecnologia de Setbal Instituto Politcnico de Setbal 2011/1012
Sumrio
Coleo:
O que ?
Listas
Interface List<E>
Classe ArrayList<E> Classe LinkedList<E>
Conjuntos (set)
Interface Set
Classe HashSet<E>
Mapas (Map)
Interface Map
Classe HashMap<K,V>
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 2
Sumrio
Em Java FX 2.0 necessrio falar nas classes de base ao ambiente e na sua relao de utilizao, nomeadamente: Application (s para dar uma ideia). Stage Scene Node ( com exemplos de Shape e UI Controls) Group E nas noes de propriedades. Poderamos utilizar alguns exemplos do livro do Captulo 1: 1.2 Como demo inicial 1.3 Mostra a escrita de texto 1.4 Mostra a utilizao de fontes (no sei se os efeitos adicionados no podero complicar. 1.5 Este utiliza vrias Shapes mas acho que algumas podem complicar (CubicCurve e QuadCurve) 1.6 A utilizao de cores apenas importante para os desenhos que eles tero de criar. Mas este exemplo demasiado complexo. Os exemplos anteriores tm essencialmente a ver com o desenho/parte grfica mas falta agora um pouco de controlos standard e resposta a eventos do rato ou do teclado. 1.7 Introduz os mens mas aqui acho que s se devria falar de exemplos simples (sem CheckMenuItem ou RadioMenuItem). Tambm sem falar em binding 1.8 Importante para fazerem o tabuleiro. Apenas os elementos essenciais. Mais alguns componentes bsicos. 1.9, 1.10 parecem-me demasiado complexos para eles. 1.11 Apenas interessa responderem a eventos do rato. 1.12 no 1.13 talvez s para a interaco usando o teclado. 1.14, 1.15, 1.16, 1.17 no 2.1 importante para o projecto saberem trabalhar com algumas imagens. E animaes apenas l mais para o fim. Resumindo a minha proposta seria: Semana 1 trabalhar com ambiente grfico simples: Shapes (texto, fontes) Semana 2 trabalhar com ambiente semelhante ao Swing com controlos elementares: botes, labels e caixas de texto + mens. Incluindo tratamento de eventos. Semana 3 animaes (s para os motivar com o aspecto aplicaes j que existe-laboratrio desta semana). 19-06-2012 Prof.das Jos Braz - Prof. Josno Cordeiro Prof Patricia Macedo 3
19-06-2012
19-06-2012
19-06-2012
19-06-2012
19-06-2012
19-06-2012
Colees ArrayList<E>
List: ArrayList<E> a implementao da interface List<E> mais comum com bom desempenho.
a nica que estudaremos detalhadamente.
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
Declara e cria uma ArrayList chamada pessoas para armazenar objetos da classe Pessoa
Exemplo:
public static void main(String[] args) { ArrayList<String> lista = new ArrayList<String>(); // cria a ArrayList de Strings lista.add("IP"); // adiciona a String IP lista.add("POO"); // adiciona a String POO a segyuira a IP lista.add("POO"); // adiciona a String POO a seguir a POO lista.add("IP"); // adiciona a String IP a seguir a POO for(int i = 0; i <lista.size(); ++i) { // itera a lista de [0] a lista.size if (lista.get(i).equals("POO")) // se contedo de lista.get(i) for igual a POO lista.remove(i); // remove o elemento [i] da lista } lista.remove("IP"); // remove o 1 elemento c/ String IP da lista for(int i = 0; i <lista.size(); ++i) System.out.println(lista.get(i)); // O resultado surpreendente? }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 10
Colees LinkedList<E>
List: LinkedList Nas operaes de insero e remoo de elementos pode oferecer melhor desempenho.
LinkedList<Pessoa> pessoas = new LinkedList<Pessoa>(); Declara e cria uma LinkedList chamada pessoas para armazenar objetos da classe Pessoa
Exemplo:
public static void main(String[] args) { LinkedList<Integer> lista = new LinkedList<Integer>(); // Cria LinkedList de int for (int val = 0; val < 10; val++) lista.add(new Integer(val)); for (int i=0; i< lista.size(); i++) if (lista.get(i).intValue()==5) lista.remove(i); for (int i=0; i< lista.size(); i++) System.out.println(lista.get(i)); } // cria valores para val // insere val no fim da lista // itera a LinkedList // se contedo do elemento [i] == 5 // remove o elemento [i]
19-06-2012
11
Nenhum dos ciclos (for, do/while, while, foreach) deve ser usado quando se pretende alterar a lista durante a sua iterao!
public static void main(String[] args) { ArrayList<String> listaStrings = new ArrayList<String>(); listaStrings.add("AO"); listaStrings.add("IPOO"); listaStrings.add("POO"); listaStrings.add("PV"); listaStrings.add("POO"); listaStrings.add("POO"); for (String ls: listaStrings) if (ls.equals("POO")) listaStrings.remove(ls); } Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at slides.Slide10_foreach.main(Slide10_foreach.java:24)
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 13
Iterator<E> Um objeto de uma classe <E> que implemente a interface Iterator e que pode ser usado para iterar qualquer coleo de objetos do tipo <E>.
a nica forma segura de alterar colees durante a iterao Entenda-se por iterar percorrer elemento a elemento uma coleo ou parte dela. Exemplo: Iterator<Pessoa> s1 = listaPessoas.iterator(); Cria um objeto iterador s1 de objetos da classe Pessoa para a coleo listaPessoas
Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 14
19-06-2012
19-06-2012
16
19-06-2012
17
19-06-2012
19
19-06-2012
20
System.out.println("**** Insere outro valor .... com a chave 4444"); mapaNomes.put(4444, "Carlos Antunes Ferreira"); printMap(mapaNomes);
}
// iterao de um Mapa public static void printMap(Map mp) { // experimenet passar uma hashMap! Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pares = (Map.Entry)it.next(); System.out.println(pares.getKey() + " = " + pares.getValue()); } }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 21
Resumindo
Coleo agregado de elementos de um mesmo tipo JCF arquitetura que inclui: Interfaces, Classes Abstratas e Concretas, Algoritmos
Interfaces genricas Collection<E> - apartir das quais se implementam classes de coleo especificas para guardar objetos de um dado tipo <E> Os algoritmos da classe Collections manipulam listas com grande eficincia.
Listas
Classe ArrayList<E>
Conjuntos (set)
Classe HashSet<E>
Mapas (Map)
Classe HashMap<K,V>
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 22
Leitura Complementar
Captulo 8
Pginas 253 a 344
http://docs.oracle.com/javase/tutorial/colle ctions/interfaces/index.html
19-06-2012
23