SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Amélia Pessoa

Android
Dicas de Performance
Agenda
Dicas de Uso
Tipos de dados em Java
Proguard
Otimizações no SQLite
StringBuilder, StringBuffer e String
Collections

Amélia Pessoa
Não faça mais do que o
necessário

Amélia Pessoa
Não use memória se não há
necessidade
byte = inteiro com sinal (1 byte)
short = inteiro com sinal (2 bytes)
int = inteiro com sinal (4 bytes)
long = inteiro com sinal (8 bytes)
float = ponto flutuante (4 bytes)
double = ponto flutuante (8 bytes)
char = caractere (2 bytes)
boolean = true ou false (1 bit)
String = Uma seqüência de caracteres

Amélia Pessoa
Conheça bem as bibliotecas

Amélia Pessoa
Evite métodos Getters e Setters

Amélia Pessoa
Proguard
# To enable ProGuard to shrink and obfuscate your code, uncomment this
(available properties: sdk.dir, user.home):
proguard.config=proguard.cfg
-optimizationpasses 5
-allowaccessmodification
-optimizations !code/simplification/arithmetic,!field/*,!
class/merging/*,!code/allocation/variable
-keepattributes *Annotation*
-keep
-keep
-keep
-keep
-keep

public
public
public
public
public

Amélia Pessoa

class
class
class
class
class

*
*
*
*
*

extends
extends
extends
extends
extends

android.app.Activity
android.app.Application
android.app.Service
android.content.BroadcastReceiver
android.content.ContentProvider
Utilize a sintaxe de loop for
aprimorada
public void loop1() {
int soma = 0;
for (int i = 0; i < testArray.length; ++i) {
soma += testArray[i].valor;
}
}
public void loop2() {
int soma = 0;
Test [] localArray = testArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
soma += localArray[i].valor;
}
}
public void loop3() {
int soma = 0;
for (Test a : testArray) {
soma += a.valor;
}
}
Amélia Pessoa
Use o banco da melhor forma

Amélia Pessoa
Use indexes
CREATE TABLE mytable (
a TEXT PRIMARY KEY, -- index created
b INTEGER,
c TEXT UNIQUE
-- index created
);
CREATE INDEX statement...

Amélia Pessoa
Não use length() em strings
longas
Exemplos:
Troque (WHERE length(str)=0) por (WHERE str='');
(WHERE length(str)==3) pode ser (WHERE str LIKE '___').

Amélia Pessoa
Use IN ao invés de OR
"x IN ('A', 'B')"
Ao invés de "x='A' OR x='B'"

Amélia Pessoa
Mais...
Use LIMIT e OFFSET;
Use TRIGGERs.

Amélia Pessoa
StringBuilder, StringBuffer e String
Imutável!!!
String s = "estou " ;
s += "concatenando ";
s += "strings!";
StringBuilder builder = new StringBuilder();
builder.append("estou ");
builder.append("concatenando ");
builder.append("strings!");
System.out.println(builder.toString());

Amélia Pessoa
Escreva aplicações multithread

Amélia Pessoa
Utilize a collection certa para
cada problema

Amélia Pessoa
Set
HashSet: Sem nenhuma sequência ou ordenação. Essa coleção é usada
para elementos não-duplicados e a ordem não importa.
LinkedHashSet: é uma Hashset com ordenação natural, ou seja, ao inserir
na lista e depois iterá-la a ordem é mantida.
TreeSet: é um Set com ordenação natural ou especificada. Comumente, se
usa elementos com Comparable ou Comparator, para se inserir já de
maneira ordenada. Internamente, a TreeSet usa e estrutura de árvore.

Amélia Pessoa
List
ArrayList: Como o nome já diz, é uma abstração de um array. Tem rápida
iteração e rápido acesso rândomico. Os seus elementos possuem uma
sequência natural por índice, porém essa coleção não é ordenada.
Implementa java.util.List e extende de java.util.Collection.
Vector: Igual a ArrayList em todos os sentidos, exceto que suas operações
são mais custosas (lentas), pois todos seus métodos são sincronizados. Ou
seja, ela é thread-safe.

Amélia Pessoa
List / Queue
LinkedList: Possui seus elementos em sequência por índice, porém seus
elementos são duplamente encadeados uns aos outros. Logo, é fácil inserir
e remover do ínicio ao fim dessa coleção. Escolha em casos onde é preciso
inserir e deletar rapidamente registros. Porém, a iteração é um pouco mais
lenta do que comparado ao ArrayList. Implementa a interface Queue
também.
PriorityQueue: É uma Queue de prioridades. Os elementos são inseridos
com ordenação natural ou especificada dado por um Comparable ou
Comparator.

Amélia Pessoa
Map
HashMap: Mapeamento chave-valor, sem ordenação nenhuma. Aceita uma
chave nula, e múltiplos elementos nulos.
Hashtable: é a HashMap com duas diferenças: é thread-safe, e não possui
elementos e nem chaves nulos.
LinkedHashMap: similar ao LinkedHashSet é um HashMap com
ordenação natural. Possui mais rápida iteração, porém nas operações de
inserir e remover será mais lenta. Possui opção de ordenação natural ou
LRU (por último acessado) em seu construtor.
TreeMap: similar a TreeSet, é um Map com ordenação natural (caso um
Comparable ou Comparator não seja especificado).

Amélia Pessoa

Contenu connexe

Tendances

Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?Marcel Caraciolo
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIinfo_cimol
 
4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funçõesFellyph Cintra
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Estruturas blade-repeticao
Estruturas blade-repeticaoEstruturas blade-repeticao
Estruturas blade-repeticaoRenato Lucena
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2garux
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIinfo_cimol
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4garux
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Programando em python tuplas e strings
Programando em python   tuplas e stringsProgramando em python   tuplas e strings
Programando em python tuplas e stringssamuelthiago
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Apresentação j query5
Apresentação j query5Apresentação j query5
Apresentação j query5douglasgrava
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 

Tendances (20)

Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Java 06 Strings Arrays
Java 06 Strings ArraysJava 06 Strings Arrays
Java 06 Strings Arrays
 
String
StringString
String
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites II
 
4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções
 
PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Estruturas blade-repeticao
Estruturas blade-repeticaoEstruturas blade-repeticao
Estruturas blade-repeticao
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Programando em python tuplas e strings
Programando em python   tuplas e stringsProgramando em python   tuplas e strings
Programando em python tuplas e strings
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Programação funcional no dia a dia
Programação funcional no dia a diaProgramação funcional no dia a dia
Programação funcional no dia a dia
 
Apresentação j query5
Apresentação j query5Apresentação j query5
Apresentação j query5
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 

En vedette

Android Banco de Dados
Android Banco de DadosAndroid Banco de Dados
Android Banco de DadosAlex Braz
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistenciaRoberson Alves
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJataiCaelum
 
Android OS: Arquitetura e Desenvolvimento
Android OS: Arquitetura e DesenvolvimentoAndroid OS: Arquitetura e Desenvolvimento
Android OS: Arquitetura e DesenvolvimentoAugusto Marinho
 
Desenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIODesenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIOAugusto Marinho
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAline Borges
 
Android - Frameworks de Persistência
Android - Frameworks de PersistênciaAndroid - Frameworks de Persistência
Android - Frameworks de PersistênciaÉdipo Souza
 
Android 03 - WebService
Android 03 - WebServiceAndroid 03 - WebService
Android 03 - WebServiceAline Borges
 
A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.Suelen Carvalho
 
Android - Criando um Adapter personalizado para uma Agenda de Contatos
Android - Criando um Adapter personalizado para uma Agenda de ContatosAndroid - Criando um Adapter personalizado para uma Agenda de Contatos
Android - Criando um Adapter personalizado para uma Agenda de ContatosETEC Monsenhor Antonio Magliano
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidFernando Anselmo
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidAntonio Marin Neto
 
"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис ЖучинскийFwdays
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: IntroduçãoAline Borges
 
Espresso 101: Introdução a UI Testing
Espresso 101: Introdução a UI TestingEspresso 101: Introdução a UI Testing
Espresso 101: Introdução a UI TestingOnyo
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - PersistênciaArthur Emanuel
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteMarcio Palheta
 
Desenvolvimento Mobile: Android e iOS caminhando juntos
Desenvolvimento Mobile: Android e iOS caminhando juntosDesenvolvimento Mobile: Android e iOS caminhando juntos
Desenvolvimento Mobile: Android e iOS caminhando juntosElo7
 

En vedette (20)

Android Banco de Dados
Android Banco de DadosAndroid Banco de Dados
Android Banco de Dados
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistencia
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJatai
 
Android OS: Arquitetura e Desenvolvimento
Android OS: Arquitetura e DesenvolvimentoAndroid OS: Arquitetura e Desenvolvimento
Android OS: Arquitetura e Desenvolvimento
 
Orm android
Orm androidOrm android
Orm android
 
Desenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIODesenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIO
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
 
Android - Frameworks de Persistência
Android - Frameworks de PersistênciaAndroid - Frameworks de Persistência
Android - Frameworks de Persistência
 
Android 03 - WebService
Android 03 - WebServiceAndroid 03 - WebService
Android 03 - WebService
 
A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.
 
Android - Criando um Adapter personalizado para uma Agenda de Contatos
Android - Criando um Adapter personalizado para uma Agenda de ContatosAndroid - Criando um Adapter personalizado para uma Agenda de Contatos
Android - Criando um Adapter personalizado para uma Agenda de Contatos
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o Android
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações Android
 
"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: Introdução
 
Espresso 101: Introdução a UI Testing
Espresso 101: Introdução a UI TestingEspresso 101: Introdução a UI Testing
Espresso 101: Introdução a UI Testing
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - Persistência
 
Android - Conceito e Arquitetura
Android - Conceito e ArquiteturaAndroid - Conceito e Arquitetura
Android - Conceito e Arquitetura
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLite
 
Desenvolvimento Mobile: Android e iOS caminhando juntos
Desenvolvimento Mobile: Android e iOS caminhando juntosDesenvolvimento Mobile: Android e iOS caminhando juntos
Desenvolvimento Mobile: Android e iOS caminhando juntos
 

Similaire à Android Performance Tips

Similaire à Android Performance Tips (20)

05 classes utilitarias
05   classes utilitarias05   classes utilitarias
05 classes utilitarias
 
Java8
Java8Java8
Java8
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Java básico - Módulo 06: Array
Java básico - Módulo 06: ArrayJava básico - Módulo 06: Array
Java básico - Módulo 06: Array
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
 
String
StringString
String
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Capítulo 6
Capítulo 6Capítulo 6
Capítulo 6
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Expressões idiomáticas do python
Expressões idiomáticas do pythonExpressões idiomáticas do python
Expressões idiomáticas do python
 
Estruturas de Dados Básicas
Estruturas de Dados BásicasEstruturas de Dados Básicas
Estruturas de Dados Básicas
 
Java
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Resumão java
Resumão javaResumão java
Resumão java
 

Android Performance Tips

  • 2. Agenda Dicas de Uso Tipos de dados em Java Proguard Otimizações no SQLite StringBuilder, StringBuffer e String Collections Amélia Pessoa
  • 3. Não faça mais do que o necessário Amélia Pessoa
  • 4. Não use memória se não há necessidade byte = inteiro com sinal (1 byte) short = inteiro com sinal (2 bytes) int = inteiro com sinal (4 bytes) long = inteiro com sinal (8 bytes) float = ponto flutuante (4 bytes) double = ponto flutuante (8 bytes) char = caractere (2 bytes) boolean = true ou false (1 bit) String = Uma seqüência de caracteres Amélia Pessoa
  • 5. Conheça bem as bibliotecas Amélia Pessoa
  • 6. Evite métodos Getters e Setters Amélia Pessoa
  • 7. Proguard # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): proguard.config=proguard.cfg -optimizationpasses 5 -allowaccessmodification -optimizations !code/simplification/arithmetic,!field/*,! class/merging/*,!code/allocation/variable -keepattributes *Annotation* -keep -keep -keep -keep -keep public public public public public Amélia Pessoa class class class class class * * * * * extends extends extends extends extends android.app.Activity android.app.Application android.app.Service android.content.BroadcastReceiver android.content.ContentProvider
  • 8. Utilize a sintaxe de loop for aprimorada public void loop1() { int soma = 0; for (int i = 0; i < testArray.length; ++i) { soma += testArray[i].valor; } } public void loop2() { int soma = 0; Test [] localArray = testArray; int len = localArray.length; for (int i = 0; i < len; ++i) { soma += localArray[i].valor; } } public void loop3() { int soma = 0; for (Test a : testArray) { soma += a.valor; } } Amélia Pessoa
  • 9. Use o banco da melhor forma Amélia Pessoa
  • 10. Use indexes CREATE TABLE mytable ( a TEXT PRIMARY KEY, -- index created b INTEGER, c TEXT UNIQUE -- index created ); CREATE INDEX statement... Amélia Pessoa
  • 11. Não use length() em strings longas Exemplos: Troque (WHERE length(str)=0) por (WHERE str=''); (WHERE length(str)==3) pode ser (WHERE str LIKE '___'). Amélia Pessoa
  • 12. Use IN ao invés de OR "x IN ('A', 'B')" Ao invés de "x='A' OR x='B'" Amélia Pessoa
  • 13. Mais... Use LIMIT e OFFSET; Use TRIGGERs. Amélia Pessoa
  • 14. StringBuilder, StringBuffer e String Imutável!!! String s = "estou " ; s += "concatenando "; s += "strings!"; StringBuilder builder = new StringBuilder(); builder.append("estou "); builder.append("concatenando "); builder.append("strings!"); System.out.println(builder.toString()); Amélia Pessoa
  • 16. Utilize a collection certa para cada problema Amélia Pessoa
  • 17. Set HashSet: Sem nenhuma sequência ou ordenação. Essa coleção é usada para elementos não-duplicados e a ordem não importa. LinkedHashSet: é uma Hashset com ordenação natural, ou seja, ao inserir na lista e depois iterá-la a ordem é mantida. TreeSet: é um Set com ordenação natural ou especificada. Comumente, se usa elementos com Comparable ou Comparator, para se inserir já de maneira ordenada. Internamente, a TreeSet usa e estrutura de árvore. Amélia Pessoa
  • 18. List ArrayList: Como o nome já diz, é uma abstração de um array. Tem rápida iteração e rápido acesso rândomico. Os seus elementos possuem uma sequência natural por índice, porém essa coleção não é ordenada. Implementa java.util.List e extende de java.util.Collection. Vector: Igual a ArrayList em todos os sentidos, exceto que suas operações são mais custosas (lentas), pois todos seus métodos são sincronizados. Ou seja, ela é thread-safe. Amélia Pessoa
  • 19. List / Queue LinkedList: Possui seus elementos em sequência por índice, porém seus elementos são duplamente encadeados uns aos outros. Logo, é fácil inserir e remover do ínicio ao fim dessa coleção. Escolha em casos onde é preciso inserir e deletar rapidamente registros. Porém, a iteração é um pouco mais lenta do que comparado ao ArrayList. Implementa a interface Queue também. PriorityQueue: É uma Queue de prioridades. Os elementos são inseridos com ordenação natural ou especificada dado por um Comparable ou Comparator. Amélia Pessoa
  • 20. Map HashMap: Mapeamento chave-valor, sem ordenação nenhuma. Aceita uma chave nula, e múltiplos elementos nulos. Hashtable: é a HashMap com duas diferenças: é thread-safe, e não possui elementos e nem chaves nulos. LinkedHashMap: similar ao LinkedHashSet é um HashMap com ordenação natural. Possui mais rápida iteração, porém nas operações de inserir e remover será mais lenta. Possui opção de ordenação natural ou LRU (por último acessado) em seu construtor. TreeMap: similar a TreeSet, é um Map com ordenação natural (caso um Comparable ou Comparator não seja especificado). Amélia Pessoa