O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Android estrutura de dados

444 visualizações

Publicada em

Memória utilizada nos aplicativos é sempre um grande problema, quando falamos em dispositivos móveis. O android possui estruturas específicas que podem melhorar o uso de memória do aplicativo, e que foram criadas especialmente para seu framework. Nestes slides você poderá conhecer estas estruturas um pouco melhor.

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Android estrutura de dados

  1. 1. Estruturas de Dados Android Otimizando uso de memória em aplicações android Paula Rosa Desenvolvedora Android
  2. 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. 3. Estrutura de dados Java ArrayList LinkedList HashMap TreeMap interface List interface Map - Permite valores duplicados - Não Permite chaves duplicadas
  4. 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. 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. 6. 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);
  7. 7. 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;
  8. 8. 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
  9. 9. 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;
  10. 10. 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
  11. 11. 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>
  12. 12. 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
  13. 13. 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;
  14. 14. 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;
  15. 15. 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
  16. 16. ArrayMap Iteração
  17. 17. 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
  18. 18. 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;
  19. 19. 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>;
  20. 20. Curiosidades • Syncronized: • ArrayList, LinkedList • Collections.syncronizedList(lista); • HashMap • Collections.syncronizedMap(map); • HashTable;
  21. 21. 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;
  22. 22. 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/

×