Top Banner
Estruturas de Dados Android Otimizando uso de memória em aplicações android Paula Rosa Desenvolvedora Android
23

Android estrutura de dados

Apr 13, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Android estrutura de dados

Estruturas de Dados AndroidOtimizando uso de memória em aplicações android

Paula RosaDesenvolvedora Android

Page 2: Android estrutura de dados

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;

Page 3: Android estrutura de dados

Estrutura de dados JavaArrayList LinkedList HashMap TreeMap

interface List

interface Map

- Permite valores duplicados - Não Permite chaves duplicadas

Page 4: Android estrutura de dados

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

Page 5: Android estrutura de dados

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

Page 6: Android estrutura de dados
Page 7: Android estrutura de dados

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);

Page 8: Android estrutura de dados

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;

Page 9: Android estrutura de dados

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;

10

5

15

2

3

função hash

f(x) = x mod 13

Posição

chave

nullnull23

null5

15

bucket

Colisão

Page 10: Android estrutura de dados

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;

Page 11: Android estrutura de dados

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

012345

ABCKEF

put(3,”K") 012345

ABC

DeletedEF

remove(3)012345

ABCDEF

Page 12: Android estrutura de dados

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>

Page 13: Android estrutura de dados

Curiosidades • SparseArray é recomendado para estrutura de dados

pequenas

"João""Amanda"

"Luiz"

HashMap

função hash

AmandaLuiz

012

João

14

Bucket

O(1) constante (melhor caso)O(n) proporcional (pior caso)

SparseArrays

012345

ABCDEF

O(log n) - busca bináriainserir e deletar mais trabalhoso

get get

Page 14: Android estrutura de dados

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;

Page 15: Android estrutura de dados

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;

Page 16: Android estrutura de dados

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 #1hash #2hash #3

key #1value #1key #2value #2key #3value #3

Page 17: Android estrutura de dados

ArrayMap

Iteração

Page 18: Android estrutura de dados

Curiosidades • ArrayMap é recomendado para estrutura de dados

pequenas

"João""Amanda"

"Luiz"

HashMap

função hash

AmandaLuiz

012

João

14

Bucket

O(1) constante (melhor caso)O(n) proporcional (pior caso)

hash #1hash #2hash #3

key #1value #1key #2

value #2key #3

value #3

ArrayMap

O(log n) - busca bináriainserir e deletar mais trabalhoso

get get

Page 19: Android estrutura de dados

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;

Page 20: Android estrutura de dados

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

Page 21: Android estrutura de dados

Curiosidades • Syncronized:

• ArrayList, LinkedList• Collections.syncronizedList(lista);

• HashMap • Collections.syncronizedMap(map);• HashTable;

Page 22: Android estrutura de dados

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;

Page 23: Android estrutura de dados

Referências• https://developer.android.com/reference/android/util/

SparseArray.html• https://developer.android.com/reference/android/

support/v4/util/ArrayMap.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/