You are on page 1of 8

Metropole Digital

1 of 8

http://www.metropoledigital.ufrn.br/aulas/disciplinas/po...

Programao Orientada a Objetos


Professores autores
Adriano Bezerra
Manuel Gomes
UirKulesza

Aula 9 - Arrays, colees e listas

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...

Listagem 1 - Declarao de um array

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.

Listagem 2 - Impresso dos valores do Array

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.

Listagem 3 - Outra forma de definir os valores de um Array

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...

Listagem 4 - Impresso dos valores de um array usando comando FOR

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.

Listagem 5 - Exemplo de Array bidimensional

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

Arrays como objetos


Vimos que arrays so estruturas para armazenar objetos, tais como Strings. Mas, preciso dizer que arrays so tambm objetos, por isso usado o comando new() para alocar
espao de armazenamento para ele. Graas a sua capacidade de se comportar como um objeto, os arrays possuem mtodos e um atributo muito til, o length,que indica seu
comprimento.
necessrio conhec-lo para no passarmos do limite, e para realizar operaes de manuteno em seus dados. Pois bem, vamos alterar o exemplo anterior (Listagem 1) que
exibe os valores do array marcapara utilizar seu atributo length. Tal programa modificado apresentado naListagem 6.

Listagem 6 - Exemplo de uso do atributo lenght de um array

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.

Figura 2 - Conjunto de objetos

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...

Listagem 7 - Exemplo de um Set

2. List como o prprio nome sugere, representa uma lista de objetos, sendo que nela os objetos podem se repetir. Veja a figura.

Figura 3 - Lista de objetos

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:

Listagem 8 - Exemplo de ArrayList

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:

Figura 4 - Dois conjuntos de objetos

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...

Listagem 9 - HashMap na prtica

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.

Figura 5 -Collection e Map

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:

Lista bsica de Mtodos da Interface Collection

boolean add(Object)

Adiciona um elemento na coleo. Como algumas colees no suportam


elementos duplicados (exemplo: Sets), esses mtodos retornam verdadeiro
(true) ou falso (false) para indicar se a adio foi bem sucedida.

boolean remove(Object)

Remove determinado elemento da coleo. Se ele no fizer parte da coleo,


retorna falso (false).

intsize()

Retorna a quantidade de elementos presentes na coleo.

boolean contains(Object)

Procura por um determinado objeto na coleo.


Vale salientar: a comparao feita pelo mtodo equals().

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

Sobre definio de Arrays Java na Wikipdia:


<http://pt.wikipedia.org/wiki/Array>
Dois artigos que falam sobre Collections em Java
<http://www.devmedia.com.br/articles/viewcomp.asp?comp=3162>
<http://javafree.uol.com.br/artigo/847654/Collections-Framework.html>

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

You might also like