Easy Java Magazine: Edição Inaugural
Easy Java Magazine: Edição Inaugural
28 – Utilizando Collections
Tutorial, Boas Práticas Dominando as estruturas de dados em Java
[ Carlos Araújo ]
[Tutorial] Artigo no estilo tutorial passo-a-passo. [Core] Técnicas Server-side, ferramentas, IDEs, e outros assuntos [Boas Práticas] Um dos objetivos da revista é levar para o leitor
que fogem às demais categorias. não somente as melhores técnicas, mas também as melhores prá-
ticas de desenvolvimento, orientadas ao aumento da qualidade e
produtividade.
Editorial
Ano I • Edição 01 • 2010
É
com grande prazer que anunciamos mais uma grande novidade para a comunidade
Java. Após ampliarmos a Java Magazine e lançarmos a primeira revista sobre Java
totalmente digital, apresentamos agora a Easy Java Magazine. Uma revista que nasce
Edição com todos os cuidados das revistas DevMedia, como já acontece com a Clube Delphi, Java
Editor Magazine, SQL Magazine, .Net Magazine, WebMobile, Engenharia de Software Magazine,
Eduardo Spínola (eduspinola@[Link]) e a também recente Easy .Net Magazine.
O nosso objetivo, como sempre, é de oferecer um excelente conteúdo para todos aqueles
Arte
interessados em aprender, independentemente do seu nível de conhecimento. E foi pensando
Capa e Diagramação Romulo Araujo (romulo@[Link])
nisso, que resolvemos lançar a Easy Java Magazine.
Produção Uma das nossas grandes dificuldades sempre foi conciliar edições com artigos para os
Gerência de Marketing Kaline Dolabella (kalined@[Link]) diferentes leitores, sejam eles: iniciantes, intermediários ou avançados. Com esta novidade,
Jornalista Responsável Kaline Dolabella - JP24185
disponibilizamos um amplo espaço para todos os leitores que estão dando seus primeiros
Revisão e Supervisão Thiago Vincenzo ([Link]@[Link])
passos na linguagem de programação mais utilizada no mundo e para os leitores, que
Coordenação Geral Daniella Costa (daniella@[Link])
mesmo já experientes, gostam de se manter atualizados com matérias mais introdutórias,
Atendimento ao leitor mas não menos importantes.
A DevMedia possui uma Central de Atendimento on-line, onde você pode Após esta breve introdução, que tal conhecermos os artigos desta edição?
tirar suas dúvidas sobre serviços, enviar críticas e sugestões e falar com um de
Não poderíamos iniciar esta revista de outra forma que não fosse apresentando a História
nossos atendentes. Através da nossa central também é possível alterar dados
cadastrais, consultar o status de assinaturas e conferir a data de envio de suas do Java. Para isso, convidamos três nomes que se você ainda não conhece, encontrará em
revistas. Acesse [Link]/central, ou se preferir entre em artigos e muito provavelmente conhecerá em eventos Java, são eles: Bruno Souza (também
contato conosco através do telefone 21 3382-5038. conhecido como Javaman), Fabiane Nardon (líder da JavaTools Community do [Link]) e
Publicidade Sérgio Rehem (líder do Java Bahia). Conhecer o passado te ajudará a compreender o presente
Cristiany Queiroz e se preparar para o futuro.
publicidade@[Link] – 21 3382-5038 O segundo artigo aborda os primeiros passos para dominar a linguagem de programação.
Anúncios – Anunciando nas publicações e nos sites do Grupo DevMedia, você Em Programação orientada a objetos com Java, Adam Victor nos ensinará como se estruturam
divulga sua marca ou produto para mais de 100 mil desenvolvedores de todo o os programas Java e desenvolveremos a nossa primeira aplicação. Para completar este artigo,
Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com detalhes sobre veja o vídeo que ensina mais alguns recursos importantes da linguagem.
preços e formatos de anúncios.
Trabalhar com texto em Java é considerado por muitos um bom desafio. Para facilitar esta
tarefa, na matéria elaborada por Michel de Lara, conheça as classes String, StringBuffer e
StringBuilder e saiba em detalhes e na prática qual a melhor situação para empregar cada
uma. No vídeo deste artigo, veja mais exemplos de uso destas classes.
Para finalizar esta edição, exploraremos um dos mais importantes recursos do Java, as
collections, artigo escrito por Carlos Araújo. Aprenda o que são Collections, quais os seus
elementos e como utilizá-las adequadamente nas suas aplicações. Na vídeo aula deste artigo,
veremos as principais coleções e algumas boas práticas.
Deste modo finalizamos a primeira edição da Easy Java. Se você quiser apresentar elogios,
críticas e sugestões, é só entrar em contato.
1 String s = “arara”;
• Linha 10: Aqui uma String vazia é criada cessário, a classe String oferece o suporte 2 s = [Link](‘a’,’e’); // recebendo um char
utilizando-se o mesmo mecanismo de necessário para operações envolvendo como parâmetro
3 [Link](s);
“atalho” que foi demonstrado na linha texto: quebrá-lo em várias partes, fazer
8, só que o conteúdo para o qual aponta busca de determinado conteúdo, conver- A saída na linha 3 será “erere”.
a variável minhaString4 é uma String vazia. ter a String em bytes, verificar se o texto
Pode-se dizer que, com relação ao conte- começa ou termina com um dado conjun- public String trim()
údo, as linhas 6 e 10 fazem a mesma coisa: to de caracteres, comparar se uma String é O método trim() retorna uma String sem os
criam uma String vazia; igual à outra (o método equals() é definido espaços em branco no começo e no final
• Linhas 12 e 13: Como já foi comentado na classe Object), dentre outros. da mesma. É útil quando se trabalha com
neste artigo, a classe String possui diversos preenchimento de formulários. Antes de
construtores. Não cabe aqui tentarmos public String replace(CharSequence target, salvar no banco de dados as informações
demonstrar a utilização de cada um deles. CharSequence replacement) preenchidas pelo usuário na tela, pode-
Estas duas linhas demonstram mais um O método replace() faz a substituição de se chamar o método trim() em todos os
exemplo de como podemos criar objetos um determinado conjunto de caracteres campos texto preenchidos pelo operador,
String a partir de outros objetos passados por outro, retornando uma nova String. de modo a evitar que espaços em branco
como parâmetro no construtor. A vari- Um exemplo de sua utilização pode desnecessários sejam gravados, econo-
ável minhaString5 tem o mesmo conteúdo ser visto em fóruns de discussão, onde mizando espaço no banco de dados. O
das variáveis minhaString1, minhaString2 e os administradores criam uma lista de código abaixo exemplifica a utilização do
minhaString3, porém foi inicializada de uma palavras de baixo calão que não podem método trim():
maneira diferente das demais, recebendo ser publicadas. Caso alguém escreva tais
um array de char. palavras, elas serão automaticamente 1 String s = “ Java Magazine “;
2 s = [Link]();
substituídas por outras, após uma busca
Estes são alguns modos de se declarar adequada (que pode ser feita utilizando o Após a execução do comando na linha
e atribuir valor às variáveis do tipo String. método contains(), explicado mais adiante). 2, a variável de referência s apontará para
Agora veremos alguns dos métodos utili- Vejamos o código abaixo: a nova String criada sem os espaços que
zados para se manipular o conteúdo destas existiam na linha 1 (“Java Magazine”).
variáveis. 1 String s = “Este comentário foi péssimo!”; Todavia, como pode ser observado, o
2 s = [Link](“péssimo”,”ruim”);
3 [Link](s); espaço em branco do meio da palavra não
Métodos úteis da classe String foi removido.
Para se trabalhar com texto, a classe String A saída na linha 3 será “Este comen-
oferece diversos métodos utilitários. Por tário foi ruim!”. O método replace() é public boolean contains(CharSequence s)
questões de espaço, não serão descritos Case Sensitive, ou seja, faz diferenciação O método contains() não tem como retorno
todos aqui. Vamos apenas comentar aque- entre maiúsculas e minúsculas. Por- uma nova String, mas sim um boolean. Ele
les que são mais utilizados no dia-a-dia do tanto, se na linha 2 estivesse escrito s = avalia se a String original contém a String
programador. Logicamente, dependendo [Link](“Péssimo”,“ruim”) nada seria alterado passada como parâmetro para o méto-
do sistema que esteja sendo desenvolvido, e a frase inicial seria impressa na saída do. Este método pode ser utilizado para
alguns métodos serão mais utilizados que padrão. Também é válido lembrar que verificar, por exemplo, se determinado
outros, mas independente do que seja ne- o método replace() busca todas as ocor- nome está na lista de aprovados de um
rências do primeiro parâmetro e realiza concurso público ou vestibular. Ou ainda,
a substituição pelo segundo. Perceba o se um dado específico foi recebido em
Listagem 1. Maneiras de declarar e inicializar Strings que acontece com a busca na próxima uma mensagem enviada por outro sistema
1 package principal; sentença: para realizar validação. As linhas abaixo
2 demonstram uma utilização do método
3 public class ClassePrincipal { 1 String s = “Gosto de comer frango com batata. contains():
4 Não gosto de batata frita.”;
5 public static void main(String[] args) { 2 s = [Link](“batata”,”polenta”);
6 String minhaString1 = new String(); 3 [Link](s); 1 String s = “001MARCOS PAULO M19803112”;
7 minhaString1 = “Java”; 2 [Link]([Link](“MARCOS”));
Aqui a impressão será “Gosto de comer
8 String minhaString2 = “Java”;
9 String minhaString3 = new String(“Java”); frango com polenta. Não gosto de comer Um detalhe interessante é que o método
10 String minhaString4 = “”; polenta frita.” contains() também é Case Sensitive. No caso
11
Por fim, o método replace() é sobrecarrega- do código acima, o resultado será true,
12 char[ ] meusChars = new char[] {‘J’,’a’,’v’,’a’};
13 String minhaString5 = new String(meusChars); do e pode receber apenas um caractere (do porém, se a String passada como parâmetro
14 } tipo primitivo char) como parâmetro para estivesse escrita “Marcos”, o resultado
15 }
que seja feita a substituição. Exemplo: seria false.
Método Descrição
1 String s1 = “rodolfo rodrigues”;
2 String s2 = “Alfredo Augusto”; public char charAt(int index) Retorna o caractere que estiver na posição do índice passado
3 String s3 = “JONNY DEBRUCE”; como parâmetro (iniciado em zero).
4 [Link]([Link]()); public String concat(String str) Retorna a junção da String na qual o método está sendo cha-
5 [Link]([Link]());
mado adicionando ao seu final a String passada por parâmetro
6 [Link]([Link]());
(“str”).
A saída será, respectivamente: public int indexOf(int ch) Tem função inversa ao charAt(): retorna a posição (índice) em
RODOLFO RODRIGUES que se encontra na String o caractere pesquisado.
ALFREDO AUGUSTO
public boolean startsWith(String prefix) Retorna true se a String iniciar com o valor passado como parâ-
JONNY DEBRUCE
metro (Case Sensitive). Caso contrário, retorna false.
Existe ainda o método toLowerCase(), o “ir- public boolean endsWith(String suffix) Mesmo funcionamento do startsWith(), só que verificando o
final da String na qual o método foi invocado.
mão menor” do método toUpperCase(), porém
menos utilizado. Ele também retorna uma public boolean equalsIgnoreCase(String Compara se duas Strings são iguais. Para que isso ocorra, é
anotherString) necessário que elas tenham o mesmo comprimento e os carac-
nova String com o mesmo conteúdo da origi- teres correspondentes nas duas sequências sejam os mesmos,
nal, mas com todos os caracteres em letras independente se maiúsculos ou minúsculos.
minúsculas. Se na linha 6 estivesse escrito Tabela 2. Outros métodos úteis presentes na classe String
Ulisses Telemaco primeira inscrição individual do JCP. A ting), e enums (espécie de lista ordenada
JEEBrasil/JavaBahia:“O ano era 1999, estava quase no meio da participação de um brasileiro era impor- de valores, muito usadas para especificar
minha graduação quando conheci de verdade Java. Comecei a tante para levar as discussões nacionais constantes do tipo numérico). Além des-
trabalhar na reescrita de dois grandes sistemas para a UFRN. para dentro do processo. Sendo assim, tas, uma sintaxe avançada da instrução
O primeiro foi desenvolvido em Applet e o segundo em JSP. Bruno Souza se cadastrou quando ainda for (uma espécie de for each) também foi
A satisfação em trabalhar com essa tecnologia foi tanta que era necessário pagar uma taxa de 100 incorporada, facilitando a iteração entre
em poucos dias (isso mesmo, dias!) nossa equipe teve a dólares. De acordo com Onno Kluyt, membros de coleção.
ideia de lançar o JSPBrasil. Era um projeto com o objetivo de responsável pelo JCP na época, Bruno foi A última versão estável da Plataforma
disponibilizar material didático sobre a tecnologia Java/JSP. O o primeiro e único a ter pago uma taxa Java é a Java SE 6 (codinome Mustang;
JSPBrasil evoluiu para J2EEBrasil e JEEBrasil. Minha satisfação para participar do JCP (cerca de um ano observe que a Sun retirou o “.0”), de de-
em trabalhar e contribuir para a comunidade continua a depois a cobrança foi abolida). Felizmente zembro de 2006. Ganhos significativos de
mesma (diria até que aumentou)”. não foi o único brasileiro a participar, e performance na JVM e no Swing foram
outros tiveram atuações importantes, os maiores benefícios. O Java SE 6 Update
Alexandre Gomes como Osvaldo Doederlein (colaborador da 10, de outubro de 2008, remodelou a ar-
Java Magazine desde a primeira edição), quitetura de Plug-ins (Applets passam a
SEA Tecnologia: “Comecei a programar em 1991, nos idos do
que participou das discussões do Java ter recursos semelhantes aos destinados
Logo, DBaseIII, Foxpro e Clipper. Em 96, entrei na faculdade
SE, Michael “MisterM Santos”, que con- a aplicações Java WebStart), o Swing ga-
e me apresentaram o Pascal e o C. No mesmo ano, no auge
tribuiu na especificação de Data e Tempo, nha um novo e mais moderno Look&Feel
da programação visual, resolvi aprender o badalado Delphi
e Yara Senger, cujo projeto exemplo de (o Nimbus) e surge o Java Kernel, um
(Dominando o Delphi 2 – Bíblia, Maco Cantu) e empaquei num
JSF foi incorporado à implementação de conjunto mais enxuto do Java Runtime
capítulo que tratava da tal Programação Orientada a Objetos.
referência. Environment (JRE), contendo as classes
Sem conseguir avançar muito, matriculei-me numa disciplina
mais comumente utilizadas deixando as
de mesmo nome que fora então oferecida na universidade e
Java 1.4, J2SE5, Java SE 6 outras para serem carregadas conforme a
fui apresentado à linguagem Java (Core Java 1st Ed). No ano
O Java 1.4 (codinome Merlin) foi a primei- demanda. No momento da escrita deste
seguinte, conheci o Bruno Souza em sua tradicionalíssima
ra versão que seguiu inteiramente o pro- artigo, o Update 20 (15 de abril de 2010)
palestra de apresentação da tecnologia, naquela que foi, se não
cesso do JCP, através da JSR 59. Liberada era o mais recente.
me engano, uma das primeiras reuniões do DFJUG. Nos 10 anos
em fevereiro de 2002, este importante mar-
seguintes, consolidei minha carreira sobre a plataforma da Sun.
co trouxe novidades como o Java WebStart JavaOne e Duke’s Award
Envolvi-me em vários projetos, participei de concursos, dei aulas,
(que permite baixar e executar aplicações Com o JavaOne se tornando cada vez
viajei, fui a muitos eventos, conheci profissionais brilhantes,
Desktop direto do navegador, com apenas mais importante, atraindo milhares de
trabalhei em ótimas empresas e até criei uma pra mim! Devo
muito à tecnologia do WORA, mas devo muito mais aos amigos
1 clique!), a nova palavra reservada assert, a desenvolvedores a cada ano, a Sun de-
que construí nesta vibrante comunidade. A propósito, o livro de
incorporação de parser XML e processador cidiu criar um prêmio para os melhores
Delphi continua marcado no capítulo de POO até hoje e nunca
XSL (JAXP), extensões de criptografia e se- projetos Java do ano, para ser entregue
mais foi aberto. Está aqui para doações (:-P ” gurança (JCE, JSSE, JAAS), encadeamento em grande estilo durante o JavaOne. E
de exceções e remodelagem das expressões assim nasceu o Duke’s Choice Award.
regulares. Era um novo ânimo para os Simbolizado por um pequeno troféu
Yara Senger desenvolvedores, pois desde 1998 nem na forma do mascote Duke, o prêmio
Globalcode: “Quando eu estava no meio do curso de a plataforma nem a linguagem tinham passou a ser ambicionado por todos
Ciências da Computação, me apaixonando por Java, sofrido grandes evoluções (a versão 1.3 os desenvolvedores Java. E mais uma
estudando Applets (final de 1999, início de 2000), um – codinome Kestrel, de 2000 – trouxe, por vez o Brasil teve destaque, ganhando
amigo veterano começava a orientação científica com exemplo, o Java Sound e o Java Platform três Dukes: em 2003, com o projeto do
uma tecnologia sensacional: Servlets! Em 2001, durante o Debugger Architecture (JPDA), pouco para Cartão Nacional de Saúde, em 2004 com
estágio na Accenture, em um projeto Java EE que esbanjava causar maiores impactos). o sistema de Imposto de Renda Pessoa
internacionalização, fomos fazer um curso na Sun, um marco O J2SE 5.0 ou Java 1.5, codinome Tiger, Física e em 2005 com o sistema de saúde
fundamental na minha vida, pois conheci Design Patterns, lançado em setembro de 2004 apresentou de São Paulo (Figura 3).
EJBs, o JavaMan (Bruno Souza) e o SouJava... e tive aula com mudanças ainda mais significativas na
o homem com quem eu iria me casar: Vinicius Senger! Em linguagem, com destaque para anotações Grupos de Usuários e Comunidades Open Source
2003, participando do segundo JavaOne, já na Globalcode, (“marcações” em classes, atributos e Quando foi lançada, a Tecnologia Java
quase casada com o Vinicius, conhecemos o projeto Rave, métodos, que vem – por exemplo – subs- inovou em vários sentidos, como na
que transformou-se em JavaServer Faces e foi recentemente tituindo a necessidade de arquivos de possibilidade de software multiplatafor-
incorporado à especificação Java EE 6. A história nos levou à configuração), generics (notação de tipos ma, na criação de ambientes visuais, no
colaboração e à criação do projeto JSF 2 Scrum Toys, que está para coleções que diminuem a obrigação download de aplicações para o browser
sendo distribuído com o GlassFish e NetBeans.” de conversão explícita de tipos – typecas- web, entre outras. Mas uma inovação
de cinco minutos para uma apresentação na Politec e levar 2005 Número de desenvolvedores Java atinge 4.5 Sistema de Saúde de São Paulo ganha o Duke’s Choice
mais de oito horas de gravações, a ideia murchou como um milhões. Award.
Java chega a Marte através do Mars Rover, que
balão vazio. Mas uma parte ficou: voz e imagem. A imagem possui Java embutido. Brasileiros criam o Juggy, mascote dos grupos de usuá-
não seria mais a nossa, e sim a dos slides com filmes que rios Java, que é adotado por JUGs do mundo todo.
capturassem o que se estava fazendo no computador! Iniciativa JEDI é lançada nas Filipinas.
2006 Anunciado que Java será open source. A plata- Tradução das APIs do OpenJDK para português.
Testamos uma série de programas e passamos a gerar as
forma Java EE é aberta como open source sob
aulas em Flash. O toque final foi um ambiente Moodle para o projeto GlassFish. Jonathan Schwartz, CEO da Sun, encontra Lula.
comportar tudo. E deste modo nascia o JEDI no Brasil.”
Java 6 é lançado.
2007 Java se torna totalmente Open Source. Uma brasileira é escolhida para o OpenJDK Interim
Manoel Pimentel Governance Board.
Ocorre o primeiro CommunityOne, uma
Editor-Chefe da Revista Visão Ágil: “Passei grande parte conferência conjunta com o JavaOne focada Iniciativa JEDI chega ao Brasil (e mais oito países que
dos anos 90 programando em Delphi e Clipper, mas no em Open Source. falam a língua portuguesa) coordenado pelo DFJUG.
dade não “escala”: à medida que progra- Adam Victor Nazareth Brandizzi
Listagem 4. Classe Mamifero.
mas crescem, é mais difícil mantê-los. A brandizzi@[Link]
public class Mamifero extends Animal { orientação a objetos é, provavelmente, a Trabalha com Java há cinco anos, especialmente
solução mais popular para esse problema, desenvolvendo aplicações Web.
public String lactar() {
return “leite”; e Java é a linguagem de referência para
} esse paradigma de programação. Nesse [Link]
}
artigo vimos que, em Java, programas são tutorial/[Link]
compostos por unidades chamadas obje- Tutorial oficial da antiga Sun Microsystems,
Listagem 5. Superclasse e subclasse em uso. tos. Os objetos possuem métodos (código) empresa desenvolvedora de Java, em
public class AnimaisAgindo { e atributos (dados). Para declarar métodos inglês.
e atributos, escrevem-se classes, que são
public static void main(String[] args) { modelos a partir dos quais os objetos são [Link]
Animal animal = new Animal();
Mamifero mamifero = new Mamifero(); criados. Vimos também que é possível Página do livro Thinking in Java, de Bruce Eckel. É
[Link](“plantas”); criar classes novas a partir de outras, um dos melhores livros para se começar a estudar
[Link](“queijo”);
usando herança, e que classes podem ser Java, e há uma edição antiga mas muito boa
String produto = [Link]();
[Link](“O produto da lactação é “ agrupadas, para melhor compreensão, gratuitamente disponível no site. Em inglês.
+ produto); em pacotes.
}
Orientação a objetos não se restringe a
} esses conceitos. Para se programar compe-
tentemente de maneira orientada a objetos,
saber como organizar estes componentes
Conclusão é crucial. Entretanto, para isso é preciso
Programação estruturada, a maneira conhecer estes componentes, e esse artigo
tradicional de se programar, é bastante explica o que são, a importância e o papel
simples e clara. Entretanto, essa simplici- de cada um.
decidirmos mudar a implementação para acordo com a Listagem 4, e modificamos public class ListaAluno {
LinkedList, é necessário apenas substituir a classe ListaAluno conforme a Listagem
o tipo ArrayList. 5, de maneira que a lista possa adicionar public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
A segunda consideração refere-se ao tipo objetos Aluno ao invés de String. [Link](“João da Silva”);
de dado que uma lista pode adicionar. [Link](“Antonio Sousa”);
Normalmente é possível inserir qualquer Classificação de objetos [Link](“Lúcia Ferreira”);
[Link](lista);
Object em uma lista, ou seja, assim como Se incluirmos na Listagem 5 a chamada [Link](lista);
poderíamos inserir uma String, poderíamos ao método sort() veremos que o código [Link](lista);
}
inserir Aluno, Integer, etc. Se a lista permite não compila. O compilador retornará um
inserir Object, na hora de recuperar esses erro informando que não encontrou o }
dados, é necessário fazer cast para o tipo método sort(). Visto que apenas trocamos
Listagem 4. Classe Aluno.
desejado. Além disso, não se teria certeza a classe String pela classe Aluno, parece
do tipo de dado que foi inserido, e o cast razoável supor que o problema está na public class Aluno {
poderia causar uma exceção. A partir de classe Aluno, e está correto. private String nome;
private String curso;
Java 5 foi introduzido o conceito de Generics, A documentação da classe Collections double nota;
que nos permite escrever código reusável nos informa que o método sort() aceita
para qualquer tipo de objeto. Sob a ótica da apenas listas cujos elementos sejam de Aluno(String nome, String curso, double nota) {
[Link] = nome;
utilização deste conceito em coleções, para tipos que implementem a interface Compa- [Link] = curso;
definirmos o tipo que lista poderá adicionar, rable, e Aluno não implementa Comparable. [Link] = nota;
}
incluímos o parâmetro <String> em sua de- Esta interface tem apenas um método
claração. Dessa forma o compilador gerará a ser implementado, compareTo(). Sua public String toString() {
um erro caso se tente adicionar um objeto implementação deve ser feita de forma a return [Link];
}
que não seja String. E não será necessário retornar um inteiro negativo, zero ou um
usar cast durante a iteração. inteiro positivo caso o objeto que execute // Métodos getters e setters
o método seja menor, igual ou maior que o }
Adicionando novo requisito – Ordem ascendente objeto passado como parâmetro. Cabe ao Listagem 5. Classe ListaAluno modificada.
Vamos supor agora que desejamos que desenvolvedor decidir o critério que será
a lista seja classificada em ordem ascen- adotado para comparar dois objetos. import [Link].*;
dente. Observando a documentação da Na classe Aluno consideraremos que a public class ListaAluno {
implementação ArrayList, verificamos que comparação entre dois objetos será de-
não existe um método de ordenação. Para terminada pela comparação entre seus public static void main(String[] args) {
List<Aluno> lista = new ArrayList<Aluno>();
solucionar este requisito, uma opção seria nomes, que são do tipo String. Dessa forma
mudar nossa aplicação para utilizar a a classe Aluno deve ser alterada para que Aluno a = new Aluno(“João da Silva”,
“Linux básico”, 0);
interface Set, onde os elementos estariam fique de acordo com a Listagem 6.
Aluno b = new Aluno(“Antonio Sousa”,
classificados pela ordem natural, no en- Note que no método compareTo() fizemos “OpenOffice”, 0);
tanto a inserção de novos elementos seria simplesmente uma chamada ao mesmo Aluno c = new Aluno(“Lúcia Ferreira”, “Internet”, 0);
[Link](a);
mais lenta. Sendo assim, vamos utilizar a método, só que para o atributo nome, que
[Link](b);
classe utilitária Collections. Esta classe dis- é do tipo String. String é uma classe compa- [Link](c);
põe do método sort(), que pode classificar rável, isto é, já implementa Comparable. [Link](lista);
}
uma interface List em ordem natural ou Agora podemos incluir uma chamada }
classificar de acordo com a implementação ao método sort() na classe ListaAluno. A
elementos na estrutura. envolve saber o que sua interface oferece, Carlos Araújo
Esta interface mapeia chaves para va- quais as suas características e como ela [Link]@[Link]
lores. Considerando a nova proposta do será usada. É professor do curso de Sistemas de Informação
problema, a chave será o nome do aluno e no Centro Universitário Luterano de Santarém
o valor será o objeto aluno. Conclusões – Pará. Leciona Estruturas de Dados e Linguagem de
Para usar uma classe que implementa Java Collections Framework tem muito Programação Orientada a Objetos usando Java, desen-
volve sistemas há 20 anos e é certificado SCJP. Mantém
Map, quaisquer classes que forem utili- mais recursos do que aqueles que apresenta-
o blog [Link]
zadas como chave devem sobrescrever mos neste artigo. É fundamental estudarmos
os métodos hashCode() e equals(). Isso é a documentação da API para nos familiari-
necessário porque em um Map as chaves zarmos com as opções que esta estrutura [Link]/docs/books/tutorial/
não podem ser duplicadas, apesar dos va- oferece. Falamos no texto que as interfaces collections/[Link]
lores poderem ser. Para a implementação não são thread-safe, no entanto a classe Collec- Tutorial da Java Collections Framework no
mostrada na Listagem 12, utilizamos um tions possui um método synchronized para cada site da Oracle/Sun
TreeMap, que garante que as chaves estarão collection. Este método retorna objetos thread-
em ordem ascendente. safe, para o caso de você necessitar de acesso [Link]/developer/onlineTraining/
Note que na declaração do collection concorrente. O conhecimento dos contratos collections/[Link]
informamos dois tipos: String e Aluno. O de equals() e hashCode() é muito importante Curso de Introdução a Collections Framework no
primeiro refere-se à chave e o segundo ao para a utilização adequada das interfaces site da Oracle/Sun
valor. O método para inserir na estrutura aqui estudadas. A implementação errada
é put(), que recebe dois objetos (chave e desses métodos pode produzir resultados
[Link]/docs/books/tutorial/java/
[Link]
valor). Para recuperar um objeto específico inesperados e errôneos.
Tutorial sobre conceitos e características de Java
utilizamos o método get() passando a chave Além das interfaces apresentadas, exis-
no site da Oracle/Sun
como parâmetro. tem outras, tais como NavigableSet, Blocking-
Como Map não estende Collection, não tem Queue, Deque, BlockingDeque, NavigableMap, etc.
[Link]/developerworks/edu/j-dw-
os métodos iterator() e listIterator(). Entre- É muito importante consultar sempre a
[Link]
tanto, existe o método keySet() que retorna documentação de Java SE para usar com
Tutorial da Java Collections Framework no site
um Set com as chaves do mapa, e o método eficiência a API.
da IBM
values() que retorna um Collection com os Neste artigo, aprendemos que é fun-
valores associados às chaves. Assim, po- damental conhecer a hierarquia das
[Link]/developer/Books/
demos percorrer o mapa partindo desses coleções de maneira a utilizar as inter-
effectivejava/[Link]
métodos e usando enhanced-for. A aplicação faces para programar polimorficamente.
Contratos e considerações sobre as
deste comando (for (Objeto obj: colecao) { ... }) Vimos também que, além da hierarquia,
implementações dos métodos de Object
para percorrer o mapa também é mostrada é fundamental conhecer os algoritmos –
na Listagem 12. métodos – para manipular corretamente
[Link]/javase/6/docs/
Com tudo o que foi apresentado, pode- as estruturas. Documentação de Java SE 6
mos constatar que não existe a melhor Entender as características de cada
implementação que resolve todos os pro- interface e implementação fornece a base
blemas de estruturas de dados. Cada tipo para a decisão de qual delas utilizar, visan-
de problema requer uma implementação do solucionar, da melhor maneira possível,
diferente dependendo das características os problemas apresentados durante o
do mesmo. Escolher a implementação certa desenvolvimento de aplicações.