Professional Documents
Culture Documents
1 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Apresentao
Precisamos constantemente manipular muitas informaes e muitos objetos ao mesmo tempo. Para isso, necessria uma estrutura que permita armazen-los e
recuper-los sempre que desejarmos. A linguagem Java oferece vrias dessas estruturas de dados em um conjunto de classes chamadas de colees. Tais colees
ajudam a armazenar e recuperar nossos objetos dentro de um sistema. isso que voc ver nesta aula.
Objetivos
Ao final desta aula, voc ser capaz de:
compreender como armazenar objetos em estruturas de dados conhecidas como arrays;
conhecer e aprender como usar de forma introdutria, um conjunto de classes da biblioteca padro de Java relacionadas manipulao de
colees de objetos.
Armazenando objetos
Existem vrias situaes durante a construo de sistemas e programas que precisamos armazenar um nmero expressivo de objetos, onde a criao e manuseio de
uma varivel para cada um dos objetos torna-se impraticvel. Esse fato ocorre, por exemplo, quando precisamos armazenar uma lista de alunos de uma turma, ou
mesmo da escola inteira, e em um dado momento precisamos recuperar apenas um dos objetos aluno dessa lista. Outro exemplo, seria quando queremos encontrar
um nmero de telefone e recorremos lista telefnica, ela nosso repositrio de dados.
Imagine termos que criar 100 (cem) variveis para 100 nomes de alunos! possvel criar um tipo especial de varivel para armazenar um nmero especfico de
objetos ou valores primitivos. Esse tipo de varivel o que chamamos de array, e ela que veremos na sequncia.
Arrays
Considere a seguir um exemplo que motiva o uso de arrays. Constantemente, precisamos tomar nota de um valor que muda ao longo do tempo, e precisamos medir
sua mdia, valores mximo e mnimo. Por exemplo, suponha que voc um treinador de um atleta velocista de 100 metros raso, como parte do treinamento,voc ir
fazer 5 medies de tiros de 100 metros. Para cada tentativa do atleta, voc vai medir o tempo e colocar o resultado em sua planilha de rendimento.
Precisamos armazenar 5 valores numricos reais para representar a marca de tempo obtida. Porm, no podemos criar 5 variveis, e sim, apenas uma para
comportar esses valores. Veja tal cdigo na Listagem 1.
08/19/2013 05:08 PM
Metropole Digital
2 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Conforme pode ser observado, um novo operador entrou em cena: o par de colchetes [ e ]. Eles servem para indicar uma dimenso, ou seja, uma posio onde
iremos colocar um valor inteiro que indica a quantidade de elementos que precisamos armazenar na varivel em questo (marca). Por conta de tais colchetes, a
varivel marcano mais capaz de armazenar um nico valor do tipo double, mas sim ir armazenar um conjunto de valores do tipo double. Dessa forma,
caracteriza-se a declarao de uma varivel/atributo do tipo array (tambm chamada de vetor) em Java.
Observe que o atributo marca representa um array, mas necessrio o operador new para alocar espao para armazenar o conjunto de valores. Assim, a palavra new
usada com o objetivo de indicar quantos valores do tipo Double sero necessrios para armazenar tais valores. A quantidade de valores estipulada para armazenar
no array, cinco (5) para o exemplo do atributo marca, um valor que permanece fixo, aps a chamada comnew. Isso significa que no nosso exemplo o atributo marca
ser capaz de armazenar 5 elementos.
O cdigo logo aps a declarao indica uma atribuio de valor para armazenar uma determinadamarca em cada posio do array. Veja que colocamos um nmero
para indicar que posio estamos acessando. Esse valor sempre comea com 0 (zero) e vai at o comprimento do vetor menos uma unidade. No nosso caso, o array
marca vai de 0 (zero) a 4 (quatro), compreendendo 5 (cinco) posies conforme foi declarado.
Para exibirmos os valores, o programa da Listagem 1pode ser incrementado pelas seguintes linhas de cdigo (Listagem 2). No indicamos a primeira tomada de
tempo como sendo o tempo 0 (zero), pois naturalmente costumamos realizar contagens a partir do nmero 1 (um).
H outra forma de definir os valores de um array, no momento de sua declarao podemos indicar seus valores, sendo que j precisamos conhec-los de antemo.
Veja aListagem 3. Observe que no precisarmos indicar o comprimento do vetor, pois ele sabe de antemo pela quantidade de elementos definidos na sua
inicializao.
Tanto na definio do array quanto no acesso para leitura ou escrita de suas posies, possvel usar um comando de repetio para acess-lo diretamente. Na
verdade, na programao diria, isso o mais comum.
Vejamos como ficaria a exibio dos valores acima com um comando FOR naListagem 4.
08/19/2013 05:08 PM
Metropole Digital
3 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Atividade 1
Para praticar o conceito de array, crie um programa que declara uma lista (array) capaz de armazenar 10 (dez) nomes de ferramentas para uso de
um mecnico. Inicialize cada uma das ferramentas armazenadas no array, em seguida, imprima cada um deles.
Arrays bidimensionais
Primeiramente, vamos definir o que uma dimenso de um array. A dimenso, ou quantidade de dimenses, o conjunto de valores que precisamos definir
para localizar uma informao. Por exemplo, uma lista de alunos de 0 a 100 pode ser organizada em um array de uma dimenso, pois para localizar um aluno nessa
lista basta indicar um valor da sequncia.
J para localizar uma pea em um tabuleiro de xadrez precisamos de duas coordenadas, linha e coluna. Assim, para representarmos um tabuleiro de xadrez com
arrays,so necessrias duas dimenses. A Listagem 5mostra esse exemplo codificado em Java. Suponha que iremos representar um tabuleiro de xadrez com linhas e
colunas de 0 (zero) a 7 (sete), compreendendo 8 valores de cada. Vamos tambm supor que cada valor representa uma String com o nome da pea que ocupa a casa.
Observe a utilizao de dois valores distintos para localizar uma casa no tabuleiro, e para cada valor um par de colchetes, um par para cada dimenso do array.
possvel definir n dimenses, porm, na prtica, no comum nem recomendvel trabalhar com tantas dimenses. Na prtica, extremamente comum trabalharmos
com apenas 1 (uma), e algumas vezes com 2 (duas), e, quase nunca com 3 (trs) dimenses, pois h outros recursos na programao orientada a objetos que
desencorajam e oferecem alternativas melhores a essa prtica.
Atividade 2
1. Observe o tabuleiro da Figura 1abaixo e crie um programa em Java que o represente atravs de um array de duas dimenses, em que
cada casa ir conter a sua cor BRANCA ou PRETA, como sendo valores do tipo String. Imprima cada uma das casas do array, aps
inici-los.
Dica: no tente definir uma a uma, pois sero 64 linhas de cdigos. Ao invs disso, crie estruturas com comandos de repetio para
preench-lo e imprim-lo.
08/19/2013 05:08 PM
Metropole Digital
4 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Figura 1 - Tabuleiro
Colees Java
A linguagem Java possui um conjunto de classes que servem para armazenar na memria vrios objetos. Tais classes no possuem o inconveniente de termos que saber de
antemo a quantidade exata de elementos que iremos armazenar, como no caso de arrays. E em alguns casos, nem mesmo o tipo.
H 3 (trs) tipos principais de objetos Java definidos para esse fim, veja-os a seguir.
1. Set representa a mesma ideia de conjuntos da matemtica, ou seja, um grupo de objetos sem ordem definida, porm, nicos. Como mostra a Figura 2.
Nunca poderemos prever a ordem com a qual sero apresentados os seus elementos. Essa situao pode no ser um incmodo diante do problema que tivermos.
Os sets possuem uma caracterstica importante em relao s buscas de objetos em seu interior, pois no precisam percorrer todos eles.
O principal representante dos Set a classe HashSet, vejamos um exemplo da sua utilizao, como mostra a Listagem 7:
08/19/2013 05:08 PM
Metropole Digital
5 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
2. List como o prprio nome sugere, representa uma lista de objetos, sendo que nela os objetos podem se repetir. Veja a figura.
Nas listas (List) definidas em Java, os objetos armazenados mantm a ordem com que foram adicionados. Uma classe do tipo List bastante utilizada a ArrayList, a
qual representa uma alternativa aos arrays convencionais vistos anteriormente. Vejamos um exemplo da utilizao de um ArrayList na Listagem 8:
3. Map Mapas so estruturas que relacionam um objeto a outro, por exemplo, um nmero de CEP ao nome de uma rua.
Podemos imaginar dois conjuntos, um de campos-chave e outro de objetos-valor que queremos armazenar. Observe aFigura 4:
Observe que para encontrarmos nossos objetos precisamos localiz-los atravs de suas chaves. Vejamos uma aplicao desses conceitos na Listagem 9:
08/19/2013 05:08 PM
Metropole Digital
6 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Os Sets e Lists so do tipo Collection. Apesar de Map no descender de Collection, tambm uma classe que define mtodos de armazenamento e recuperao de
objetos.
Todas as classes do tipo Set e List descendem (implementam) a interface Collection. Veremos mais detalhes sobre interfaces em aulas futuras. Por hora, podemos
entender interfaces como contratos que definem um conjunto de mtodos que devem ser implementados pelas classes. No caso da interface Collection, ela define
mtodos para adicionar, remover, verificar a presena de um dado objeto. Tais mtodos devem necessariamente existir em todas as List e Sets definidos para a
linguagem Java. Segue abaixo uma lista bsica desses mtodos:
boolean add(Object)
boolean remove(Object)
intsize()
boolean contains(Object)
08/19/2013 05:08 PM
Metropole Digital
7 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
Anote a Dica
As colees Java mantm um mecanismo interno de ordenao e recuperao de dados e para isso fazem uso de tabelas hash. Tais tabelas so
utilizadas para que a pesquisa de um objeto seja feita de maneira rpida.
Mas, como funciona?
Cada objeto classificado pelo seu hashCode, mtodo de java.lang.Object que retorna um int, e com isso podemos agrupar os objetos por esse valor.
Quando realizada uma busca, s percorrido o grupo de objetos com o mesmo hashCode.
Atividade 3
Crie um programa que registra uma lista de compras semanais com itens como: arroz, feijo, carne, po etc. Utilize os trs tipos de colees
vistos at aqui: oHashSet, ArrayList e HashMap.
Leitura Complementar
Resumo
Voc estudou hoje que em sistemas grandes, bastante comum precisarmos de um grande conjunto de objetos. Voc viu que a linguagem Java oferece dois
mecanismos para armazenar um grande nmero de objetos: arrays e colees. Agora, voc j sabe que os Arrays permitem armazenar um conjunto de objetos com
tamanho fixo definido na sua inicializao. J as colees podem ser usadas para armazenar um conjunto no-finito de elementos, e so implementadas em Java
como um conjunto de interfaces, que oferecem um conjunto de mtodos padronizados para armazenamento e recuperao.
Autoavaliao
1 - Elabore um programa que exiba um calendrio do dia 1 ao dia 31, utilizando um array de duas dimenses.
2 - Qual a principal diferena entre um array convencional e a classe ArrayList que voc destacaria?
3 - Que tipo de coleo se assemelha a um conjunto matemtico? Por qu? Explique.
Referncias
THE JAVA tutorials. Arrays. Disponvel em: <http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html>. Acesso em: 15 maio 2010.
______. Lesson: interfaces. Disponvel em: <http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html>. Acesso em: 15 maio 2010.
______. Lesson: implementations. Disponvel em: <http://java.sun.com/docs/books/tutorial/collections/implementations/index.html>. Acesso em: 15 maio 2010.
Voltar
Imprimir
Topo
08/19/2013 05:08 PM
Metropole Digital
8 of 8
http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...
08/19/2013 05:08 PM