In Android gibt es Maps, in die man primitive Typen hinzufügen kann. Kannst du mehr darüber erzählen?
sobes.tech KI
Antwort von AI
Ja, um Android SDK, existem implementações especializadas de Map para trabalhar com tipos primitivos, otimizadas para desempenho e economia de memória em comparação com o HashMap<K, V> padrão.
As mais comuns são:
SparseIntArray: Armazena pares de chavesinte valoresint.SparseLongArray: Armazena pares de chavesinte valoreslong.SparseBooleanArray: Armazena pares de chavesinte valoresboolean.LongSparseArray<E>: Armazena pares de chaveslonge objetos do tipoE.
Vantagens do uso dessas classes:
- Eficiência de memória: Elas usam arrays internos para armazenar dados, evitando custos associados à criação de objetos wrapper para tipos primitivos (
Integer,Long,Boolean) e à estrutura de lista ligada deHashMap. - Desempenho: Operações de inserção, obtenção e remoção geralmente são mais rápidas, especialmente com muitos elementos, graças a uma estrutura interna mais simples e à evitação de hashing para chaves primitivos no caso de SparseArray.
Exemplo de uso de SparseIntArray:
// Criar SparseIntArray
SparseIntArray sparseArray = new SparseIntArray();
// Adicionar elementos
sparseArray.put(0, 100);
sparseArray.put(1, 200);
sparseArray.put(10, 300);
// Obter valor por chave
int value = sparseArray.get(1); // value será 200
// Obter valor por chave com valor padrão
int valueWithDefault = sparseArray.get(5, -1); // valueWithDefault será -1
// Remover elemento por chave
sparseArray.delete(10);
// Iterar sobre os elementos
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
int val = sparseArray.valueAt(i);
// Lógica de processamento de key e val
}
De modo similar, SparseLongArray, SparseBooleanArray e LongSparseArray são utilizados. LongSparseArray requer a especificação do tipo de objeto, pois seus valores são objetos e não tipos primitivos.
A escolha entre HashMap padrão e mapas Sparse especializados depende de seus requisitos:
- Se as chaves forem objetos arbitrários ou tipos primitivos que não sejam
intoulong, useHashMap. - Se as chaves forem
intoulong, e os valores forem tipos primitivos ou objetos no caso deLongSparseArray, e a eficiência de memória e desempenho forem importantes, é preferível usar mapas Sparse.
É importante notar que mapas Sparse não são seguros para uso em múltiplas threads. Se precisar de uma implementação segura para threads, considere usar ConcurrentHashMap com objetos wrapper para primitivos. No entanto, na maioria dos casos, na thread de interface do usuário de uma aplicação Android, onde essas estruturas são frequentemente usadas, a segurança de threads não é um problema.