SlideShare une entreprise Scribd logo
1  sur  23
Estruturas de Dados Android
Otimizando uso de memória em aplicações android
Paula Rosa
Desenvolvedora Android
Estruturas de dados Java
• API do Java;
• Representam estruturas de dados avançadas;
• Vieram para facilitar a manipulação de
estruturas;
• Mais utilizadas no android: ArrayList, HashMap;
Estrutura de dados Java
ArrayList LinkedList HashMap TreeMap
interface
List
interface
Map
- Permite valores duplicados - Não Permite chaves duplicadas
ArrayList
• Representa um array (série de elementos do mesmo tipo);
• Foi criada para facilitar manipulação com os arrays
• Rápida para acessar elementos get(index);
• Não é syncronized
LinkedList
• Lista ligada: cada elemento Entry possui 3
referencias: next, previous e element;
• Rápida para adicionar e remover elementos;
• Não é syncronized
HashMap
• Possui conceito de chave-valor (key-value);
• Implementa a interface Map;
• 2 conceitos importantes:
- initial size: default 16 posições
- load factor (float mensura o momento em que dobrará o
número de posições) - default: 0.75
• Métodos: put(key, value), get(key), containsKey(key)…
• Não é syncronized
Estrutura de dados Android: SparseArray e
ArrayMap
• São estruturas de dados criadas especificamente
para o Android;
• Usadas em situações que precisamos de estruturas
Chave-Valor (key-value);
1˚ motivo: Autoboxing
• Conversão automática de um primitivo na sua classe
Wrapper;
• Ocorre em tempo de compilação;
• Hashmap não permite chaves com primitivos;
Integer i = 5;
2˚ motivo: Objetos Extras para mapeamento
• Cria um objeto extra (int) usado no cálculo da posição;
• Precisa armazenar os valores de hashcode, chave,
valor e próximo registro;
1
0
5
1
5
2
3
função hash
f(x) = x mod 13
Posição
chave
null
null
2
3
null
5
15
bucket
Colisão
SparseArray
• Utiliza conceito de chave-valor (key-value);
• utiliza valores int ou long primitivos como chave;
• Utiliza um array separado para a chave;
• Utiliza busca binária internamente;
• Recomendado para estruturas até 1000 elementos;
SparseArray
• Os elementos removidos são marcados, o array não
sofre compactação logo em seguida da remoção;
• Futuramente será recolhido pelo GC;
Chave Valor
Arrays
Adicionar de Elementos Remoção de elementos
0
1
2
3
4
5
A
B
C
K
E
F
put(3,”K") 0
1
2
3
4
5
A
B
C
Deleted
E
F
remove(3)0
1
2
3
4
5
A
B
C
D
E
F
SparseArray
Considerações:
• O elemento removido é marcado
como DELETED;
• Ao requisitar o tamanho ou um
elemento, ocorre a compactação;
• Ao inserir verifica se a posição já
esta marcada como Deleted;
SparceArray Tipo de dados
SparseArray <int, Object>
SparseIntArray <int, int>
SparseBooleanArray <int , boolean>
SparseLongArray <int, long>
LongSparseArray <long, Object>
Curiosidades
• SparseArray é recomendado para estrutura de dados
pequenas
"João"
"Amanda"
"Luiz"
HashMap
função
hash
Amanda
Luiz
0
1
2
…
João
…
14
Bucket
O(1) constante (melhor caso)
O(n) proporcional (pior caso)
SparseArrays
0
1
2
3
4
5
A
B
C
D
E
F
O(log n) - busca binária
inserir e deletar mais trabalhoso
get get
Resultado
• Redução na quantidade de objetos utilizados;
• Implica em menos objetos para serem recolhidos pelo garbage
collector;
• Melhor aproveitamento da estrutura;
• Economia de memória;
ArrayMap
• Utiliza conceito de chave-valor (key-value);
• Utiliza objetos como chave;
• Utiliza dois arrays: um com valor de hash outro com
chave/valor;
• Utiliza busca binária internamente;
• Implementa a interface Map;
• Recomendado para estruturas até 1000 elementos;
ArrayMap
Considerações:
• Recomendado para maior frequência de leitura (get);
• Adicionar e remover são mais custosos;
• Cache interno de Arrays de tamanho 4 e 8 para evitar spam
do GC;
• API 19+;
Array 1 Array 2
hash #1
hash #2
hash #3
key #1
value #1
key #2
value #2
key #3
value #3
ArrayMap
Iteração
Curiosidades
• ArrayMap é recomendado para estrutura de dados
pequenas
"João"
"Amanda"
"Luiz"
HashMap
função
hash
Amanda
Luiz
0
1
2
…
João
…
14
Bucket
O(1) constante (melhor caso)
O(n) proporcional (pior caso)
hash #1
hash #2
hash #3
key #1
value #1
key #2
value #2
key #3
value #3
ArrayMap
O(log n) - busca binária
inserir e deletar mais trabalhoso
get get
Resultado
• Redução na quantidade de objetos utilizados;
• Implica em menos objetos para serem recolhidos pelo garbage
collector;
• Melhor aproveitamento da estrutura;
• Economia de memória;
Curiosidades
• SparseArrayCompat (suporte versões API < 19)
• removeAtRange(int index, int size);
• ArrayMap implementa interface Map
• SimpleArrayMap (suporte)
• importante: não implementa Map, mas contém a
maioria dos métodos;
• ArraySet implementa Collection<E> e Set<E>;
Curiosidades
• Syncronized:
• ArrayList, LinkedList
• Collections.syncronizedList(lista);
• HashMap
• Collections.syncronizedMap(map);
• HashTable;
finally{}
• Utilizar estrutura de dados do Android quando
necessário;
• Tamanho de dados não exceder 1000 itens;
• Chaves int ou long: SparseArray
• Chaves objetos: ArrayMap
• Usar SimpleArrayMap quando não precisar de
compatibilidade com Map;
Referências
• https://developer.android.com/reference/android/util/SparseArray.htm
l
• https://developer.android.com/reference/android/support/v4/util/Array
Map.html
• https://www.youtube.com/watch?v=ORgucLTtTDI
• https://www.youtube.com/watch?v=I16lz26WyzQ&t=129s
• http://gunhansancar.com/sparsearray-vs-hashmap/
• https://blog.mindorks.com/android-app-optimization-using-arraymap-and-
sparsearray-f2b4e2e3dc47#.lhprjal9a
• http://deepakmishra.me/blog/index.php/2015/10/19/hashmaps-arraymaps-
and-sparsearrays-in-android/
• http://www.roman10.net/2017/01/29/arraymap-and-its-friends-in-android/
• http://www.roman10.net/2017/01/21/sparsearray-and-its-friends-in-android/

Contenu connexe

En vedette

Artificial Intelligence & Robotics
Artificial Intelligence & RoboticsArtificial Intelligence & Robotics
Artificial Intelligence & RoboticsBiswajit Pratihari
 
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay Bhargav
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay BhargavOWASP AppSec EU - SecDevOps, a view from the trenches - Abhay Bhargav
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay BhargavAbhay Bhargav
 
Kolte Patil Mirabilis
 Kolte Patil Mirabilis Kolte Patil Mirabilis
Kolte Patil Mirabilis360 Realtors
 
Content marketing tactics to grow traffic for your business
Content marketing tactics to grow traffic for your businessContent marketing tactics to grow traffic for your business
Content marketing tactics to grow traffic for your businessLetitiah Obiri
 
How Variable Data Printing can help your Business add value with Personalizat...
How Variable Data Printing can help your Business add value with Personalizat...How Variable Data Printing can help your Business add value with Personalizat...
How Variable Data Printing can help your Business add value with Personalizat...Saumya Nawab
 
как разбить системный диск на два логических диска средствами Windows 10
как разбить системный диск на два логических диска средствами Windows 10как разбить системный диск на два логических диска средствами Windows 10
как разбить системный диск на два логических диска средствами Windows 10Татьяна Мишевская
 
Enabling government through smart procurment.
Enabling government through smart procurment.Enabling government through smart procurment.
Enabling government through smart procurment.degsydob
 
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı ÜrünTeknolo
 

En vedette (19)

Recyclerview view types
Recyclerview view typesRecyclerview view types
Recyclerview view types
 
Apresentação gdg floripa 1
Apresentação gdg floripa 1Apresentação gdg floripa 1
Apresentação gdg floripa 1
 
Tudo sobre listas no android
Tudo sobre listas no androidTudo sobre listas no android
Tudo sobre listas no android
 
Android wear
Android wearAndroid wear
Android wear
 
fb_cove copy
fb_cove copyfb_cove copy
fb_cove copy
 
Migração pra android
Migração pra androidMigração pra android
Migração pra android
 
Somos todos acessiveis
Somos todos acessiveisSomos todos acessiveis
Somos todos acessiveis
 
Artificial Intelligence & Robotics
Artificial Intelligence & RoboticsArtificial Intelligence & Robotics
Artificial Intelligence & Robotics
 
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay Bhargav
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay BhargavOWASP AppSec EU - SecDevOps, a view from the trenches - Abhay Bhargav
OWASP AppSec EU - SecDevOps, a view from the trenches - Abhay Bhargav
 
Kolte Patil Mirabilis
 Kolte Patil Mirabilis Kolte Patil Mirabilis
Kolte Patil Mirabilis
 
Content marketing tactics to grow traffic for your business
Content marketing tactics to grow traffic for your businessContent marketing tactics to grow traffic for your business
Content marketing tactics to grow traffic for your business
 
How Variable Data Printing can help your Business add value with Personalizat...
How Variable Data Printing can help your Business add value with Personalizat...How Variable Data Printing can help your Business add value with Personalizat...
How Variable Data Printing can help your Business add value with Personalizat...
 
Netflix prize
Netflix prizeNetflix prize
Netflix prize
 
Ensayo macrográfico de uniones soldadas (DTAw) (12/16)
Ensayo macrográfico de uniones soldadas (DTAw) (12/16) Ensayo macrográfico de uniones soldadas (DTAw) (12/16)
Ensayo macrográfico de uniones soldadas (DTAw) (12/16)
 
как разбить системный диск на два логических диска средствами Windows 10
как разбить системный диск на два логических диска средствами Windows 10как разбить системный диск на два логических диска средствами Windows 10
как разбить системный диск на два логических диска средствами Windows 10
 
Greenwashing
Greenwashing Greenwashing
Greenwashing
 
Enabling government through smart procurment.
Enabling government through smart procurment.Enabling government through smart procurment.
Enabling government through smart procurment.
 
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün
2015 Yılında Çıkması Beklenen En Heyecan Verici 16 Akıllı Ürün
 
#Controllinnerseal Ecological report
#Controllinnerseal Ecological report#Controllinnerseal Ecological report
#Controllinnerseal Ecological report
 

Similaire à Android estrutura de dados

Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Eduardo Carvalho
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de PerformanceAmélia Pessoa
 
LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10Carlos Santos
 
Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKLeonardo Dalmina
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Erick Petrucelli
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLCarlos Santos
 
4234 mysql
4234 mysql4234 mysql
4234 mysqlherbam
 

Similaire à Android estrutura de dados (20)

Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
Aprendendo R
Aprendendo RAprendendo R
Aprendendo R
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de Performance
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10LabMM3 - Aula teórica 10
LabMM3 - Aula teórica 10
 
Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDK
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)
 
Deep dive de Amazon Redshift
Deep dive de Amazon RedshiftDeep dive de Amazon Redshift
Deep dive de Amazon Redshift
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQL
 
4234 mysql
4234 mysql4234 mysql
4234 mysql
 

Android estrutura de dados

  • 1. Estruturas de Dados Android Otimizando uso de memória em aplicações android Paula Rosa Desenvolvedora Android
  • 2. Estruturas de dados Java • API do Java; • Representam estruturas de dados avançadas; • Vieram para facilitar a manipulação de estruturas; • Mais utilizadas no android: ArrayList, HashMap;
  • 3. Estrutura de dados Java ArrayList LinkedList HashMap TreeMap interface List interface Map - Permite valores duplicados - Não Permite chaves duplicadas
  • 4. ArrayList • Representa um array (série de elementos do mesmo tipo); • Foi criada para facilitar manipulação com os arrays • Rápida para acessar elementos get(index); • Não é syncronized LinkedList • Lista ligada: cada elemento Entry possui 3 referencias: next, previous e element; • Rápida para adicionar e remover elementos; • Não é syncronized
  • 5. HashMap • Possui conceito de chave-valor (key-value); • Implementa a interface Map; • 2 conceitos importantes: - initial size: default 16 posições - load factor (float mensura o momento em que dobrará o número de posições) - default: 0.75 • Métodos: put(key, value), get(key), containsKey(key)… • Não é syncronized
  • 6.
  • 7. Estrutura de dados Android: SparseArray e ArrayMap • São estruturas de dados criadas especificamente para o Android; • Usadas em situações que precisamos de estruturas Chave-Valor (key-value);
  • 8. 1˚ motivo: Autoboxing • Conversão automática de um primitivo na sua classe Wrapper; • Ocorre em tempo de compilação; • Hashmap não permite chaves com primitivos; Integer i = 5;
  • 9. 2˚ motivo: Objetos Extras para mapeamento • Cria um objeto extra (int) usado no cálculo da posição; • Precisa armazenar os valores de hashcode, chave, valor e próximo registro; 1 0 5 1 5 2 3 função hash f(x) = x mod 13 Posição chave null null 2 3 null 5 15 bucket Colisão
  • 10. SparseArray • Utiliza conceito de chave-valor (key-value); • utiliza valores int ou long primitivos como chave; • Utiliza um array separado para a chave; • Utiliza busca binária internamente; • Recomendado para estruturas até 1000 elementos;
  • 11. SparseArray • Os elementos removidos são marcados, o array não sofre compactação logo em seguida da remoção; • Futuramente será recolhido pelo GC; Chave Valor Arrays Adicionar de Elementos Remoção de elementos 0 1 2 3 4 5 A B C K E F put(3,”K") 0 1 2 3 4 5 A B C Deleted E F remove(3)0 1 2 3 4 5 A B C D E F
  • 12. SparseArray Considerações: • O elemento removido é marcado como DELETED; • Ao requisitar o tamanho ou um elemento, ocorre a compactação; • Ao inserir verifica se a posição já esta marcada como Deleted; SparceArray Tipo de dados SparseArray <int, Object> SparseIntArray <int, int> SparseBooleanArray <int , boolean> SparseLongArray <int, long> LongSparseArray <long, Object>
  • 13. Curiosidades • SparseArray é recomendado para estrutura de dados pequenas "João" "Amanda" "Luiz" HashMap função hash Amanda Luiz 0 1 2 … João … 14 Bucket O(1) constante (melhor caso) O(n) proporcional (pior caso) SparseArrays 0 1 2 3 4 5 A B C D E F O(log n) - busca binária inserir e deletar mais trabalhoso get get
  • 14. Resultado • Redução na quantidade de objetos utilizados; • Implica em menos objetos para serem recolhidos pelo garbage collector; • Melhor aproveitamento da estrutura; • Economia de memória;
  • 15. ArrayMap • Utiliza conceito de chave-valor (key-value); • Utiliza objetos como chave; • Utiliza dois arrays: um com valor de hash outro com chave/valor; • Utiliza busca binária internamente; • Implementa a interface Map; • Recomendado para estruturas até 1000 elementos;
  • 16. ArrayMap Considerações: • Recomendado para maior frequência de leitura (get); • Adicionar e remover são mais custosos; • Cache interno de Arrays de tamanho 4 e 8 para evitar spam do GC; • API 19+; Array 1 Array 2 hash #1 hash #2 hash #3 key #1 value #1 key #2 value #2 key #3 value #3
  • 18. Curiosidades • ArrayMap é recomendado para estrutura de dados pequenas "João" "Amanda" "Luiz" HashMap função hash Amanda Luiz 0 1 2 … João … 14 Bucket O(1) constante (melhor caso) O(n) proporcional (pior caso) hash #1 hash #2 hash #3 key #1 value #1 key #2 value #2 key #3 value #3 ArrayMap O(log n) - busca binária inserir e deletar mais trabalhoso get get
  • 19. Resultado • Redução na quantidade de objetos utilizados; • Implica em menos objetos para serem recolhidos pelo garbage collector; • Melhor aproveitamento da estrutura; • Economia de memória;
  • 20. Curiosidades • SparseArrayCompat (suporte versões API < 19) • removeAtRange(int index, int size); • ArrayMap implementa interface Map • SimpleArrayMap (suporte) • importante: não implementa Map, mas contém a maioria dos métodos; • ArraySet implementa Collection<E> e Set<E>;
  • 21. Curiosidades • Syncronized: • ArrayList, LinkedList • Collections.syncronizedList(lista); • HashMap • Collections.syncronizedMap(map); • HashTable;
  • 22. finally{} • Utilizar estrutura de dados do Android quando necessário; • Tamanho de dados não exceder 1000 itens; • Chaves int ou long: SparseArray • Chaves objetos: ArrayMap • Usar SimpleArrayMap quando não precisar de compatibilidade com Map;
  • 23. Referências • https://developer.android.com/reference/android/util/SparseArray.htm l • https://developer.android.com/reference/android/support/v4/util/Array Map.html • https://www.youtube.com/watch?v=ORgucLTtTDI • https://www.youtube.com/watch?v=I16lz26WyzQ&t=129s • http://gunhansancar.com/sparsearray-vs-hashmap/ • https://blog.mindorks.com/android-app-optimization-using-arraymap-and- sparsearray-f2b4e2e3dc47#.lhprjal9a • http://deepakmishra.me/blog/index.php/2015/10/19/hashmaps-arraymaps- and-sparsearrays-in-android/ • http://www.roman10.net/2017/01/29/arraymap-and-its-friends-in-android/ • http://www.roman10.net/2017/01/21/sparsearray-and-its-friends-in-android/