AndroidWie verwende ich SparseArray?


Einführung

Ein SparseArray ist eine Alternative für eine Map . Eine Map erfordert, dass ihre Schlüssel Objekte sind. Das Phänomen des Autoboxings tritt auf, wenn wir einen primitiven int Wert als Schlüssel verwenden wollen. Der Compiler konvertiert primitive Werte automatisch in ihre geschachtelten Typen (z. B. int in Integer ). Der Unterschied beim Speicherbedarf ist spürbar: int verwendet 4 Byte, Integer 16 Byte. Ein SparseArray verwendet int als Schlüsselwert.

Bemerkungen

Vorteil :

  • Weniger Speicherbedarf (aufgrund der primitiven Schlüssel).
  • Kein Auto-Boxen.

Nachteil:

  • SparseArray verwendet die binäre Suche nach dem Suchwert (O (log n)). Daher ist es möglicherweise nicht die beste Lösung, wenn mit einer großen Anzahl von Elementen gearbeitet werden muss (verwenden Sie HashMap).

Es gibt verschiedene Varianten der Familie: -SparseArray <Integer, Object> -SparseBooleanArray <Integer, Boolean> -SparseIntArray <Integer, Integer> -SparseLongArray <Integer, Long> -LongSparseArray <Long, Object> -LongSparseLongArray <Long, Long >

SparseArray-Operationen

  • Element hinzufügen - put (int, x): Fügt dem angegebenen Wert eine Zuordnung vom angegebenen Schlüssel hinzu, wobei die vorherige Zuordnung vom angegebenen Schlüssel ersetzt wird, falls vorhanden. - append (int, x): Fügt ein Schlüssel / Wert-Paar in das Array ein und optimiert für den Fall, dass der Schlüssel größer ist als alle vorhandenen Schlüssel im Array. Bei sequentiellen Schlüsseln sollten Sie append () verwenden, um die Leistung zu optimieren. Ansonsten ist put () in Ordnung.

  • Element entfernen - delete (int): Entfernt die Zuordnung aus dem angegebenen Schlüssel, falls vorhanden. - removeAt (int): Entfernt die Zuordnung am angegebenen Index. - removeAtRange (int, int): Entfernt einen Zuordnungsbereich als Stapel.

  • Zugriff auf Element - get (int): Ruft das vom angegebenen Schlüssel zugeordnete int oder 0 ab, wenn keine solche Zuordnung vorgenommen wurde. - get (int, E): Ruft das vom angegebenen Schlüssel zugeordnete int oder den angegebenen Wert ab, wenn keine solche Zuordnung vorgenommen wurde. - valueAt (int): Gibt einen Index im Bereich 0 ... size () - 1 zurück, gibt den Wert aus der indexten Schlüsselwertzuordnung zurück, die dieser SparseIntArray speichert. Indizes werden aufsteigend sortiert.

  • index / key search - keyAt (int): Gibt einen Index im Bereich 0 ... size () - 1 zurück, gibt er den Schlüssel aus der indexten Schlüsselwertzuordnung zurück, die dieser SparseIntArray speichert. Indizes werden aufsteigend sortiert. - valueAt (int): Gibt einen Index im Bereich 0 ... size () - 1 zurück, gibt den Wert aus der indexten Schlüsselwertzuordnung zurück, die dieser SparseIntArray speichert. Indizes werden aufsteigend sortiert. - indexOfKey (int): Gibt den Index zurück, für den keyAt (int) den angegebenen Schlüssel zurückgeben würde, oder eine negative Zahl, wenn der angegebene Schlüssel nicht zugeordnet ist. - indexOfValue (E): Gibt einen Index zurück, für den valueAt (int) den angegebenen Schlüssel zurückgeben würde, oder eine negative Zahl, wenn dem angegebenen Wert keine Schlüssel zugeordnet sind. Beachten Sie, dass dies eine lineare Suche ist, im Gegensatz zu Suchvorgängen nach Schlüsseln, und dass mehrere Schlüssel auf denselben Wert abgebildet werden können. Dadurch wird nur einer von ihnen gefunden. Der Unterschied im Speicherbedarf ist auffällig: Das int verwendet 4 Bytes, die Integer verwendet 16 Bytes. ParseArray verwendet int als Schlüsselwert.

Wie verwende ich SparseArray? Verwandte Beispiele