Programação II – Java Collections Framework (JCF) Christopher Burrows Arrays Um Array é um contentor que armazena um número fixo de valores de um tipo. Exemplo: – – int arrayInt[] = new int[9]; <- cria um Array que pode armazenar 9 números inteiros. String nomes[] = new String[6]; <- cria um Array que pode armazenar 6 Strings; Arrays Os arrays são estruturas simples e eficientes, se se pretender armazenar um número limitado de valores, mas têm a limitação de serem estáticos. Se pretendermos armazenar um número indefinido de valores, os Arrays não servem. Aí é necessário ter um contentor próprio para tal. Java Collections Framework O JCF é um conjunto de interfaces e algoritmos que permitem criar e manipular Collections. Uma Collection, à semelhança dum Array, é um contentor que permite armazenar vários objectos num só elemento. Mas, ao contrário de um Array, não é necessário especificar a dimensão. Java Collections Framework Exemplo: Collection col = new ImplementacaoDeCollection(); Collection.add(Objecto1); Collection.add(Objecto2); – O tamanho do contentor vai aumentando consoante os objectos que lhe são adicionados. Java Collections Framework As – – – – Collections servem essencialmente para: Agrupar objectos; Armazenar objectos; Ordenar objectos; Pesquisar objectos; Java Collections Framework Vantagens – – – sobre os arrays: Estrutura dinâmica; Código mais perceptivel; Menor “esforço” de programação; Java Collections Framework Interfaces Interfaces principais, definidas pelo JCF: Java Collections Framework Collection Collection: – Define as funcionalidades básicas que os seus subtipos têm de definir: .add(Objecto obj); .addAll(Collection col); .remove(Objecto obj); .removeAll(Collection col); .retainAll(Collection col); Java Collections Framework - Map Map: – – – Interface que permite armazenar pares de chavevalor, isto é, para cada chave inserida existe um valor que lhe está associado. As chaves são obrigatoriamente únicas, enquanto que os valores que lhes estão associados podem ser repetidos. Não é um subtipo de Collection, pelo que existem métodos definidos pela Interface Collection, que não contém. Java Collections Framework - Map – Em vez do .add(Objecto obj), tem o .put((Objecto)Chave, (Objecto)Valor); – Em vez do .contains(Objecto obj), tem o .containsKey((Objecto)Chave), para saber se contém uma determinada chave, e .contains((Objecto)Valor), para saber se contém um determinado valor. Iteração dos elementos de uma Collection – for-each Em vez de um ciclo “for” normal (for (int i = 0; i < Collection.length(); i++), pode-se utilizar o for-each: – for(Objecto obj : col) <- para cada obj do tipo Objecto na Collection col, repete o ciclo. Iteração dos elementos de uma Collection - Iterator Um objecto Iterator serve para percorrer a Collection. Este objecto é criado chamando o método .iterator() da Collection em questão. Exemplo: List <String> nomes = new ArrayList<String>(); Iterator <String> itNomes = nomes.iterator(); While (itNomes.hasNext()) { String nome = itNomes.next(); } Implementações comuns - Set Set – – – e SortedSet(Interface): HashSet; TreeSet; LinkedHashSet; Implementações comuns - List List – – (Interface): ArrayList; LinkedList; Implementações comuns - Map Map – – – e SortedMap (Interface): HashMap; TreeMap; LinkedHashMap; Exemplos List <String> nomes = new ArrayList<String>(); Map <String, String> dicionario = new HashMap<String, String>(); Exercicio Aproveitando o código da aula anterior, criar uma Lista de Forma(s). Criar um ciclo que se repita 10 vezes (de x = 0 até x = 10). Se o número for par (x%2==0), cria um novo Circulo com x de raio. Caso contrário, cria um novo Quadrado com o lado de tamanho x. Exercicio Uma vez inicializada a Forma(como Quadrado ou Circulo), esta deverá ser inserida na Lista de formas (ainda dentro do ciclo). Após concluido este ciclo, percorrer a Lista e mostrar a área de cada uma das formas no seguinte formato: – – “A área do Circulo é: “ + area; “A área do Quadrado é: “ + area;