Diferencia entre put (…) y append (…) para un SparseArray?

Sólo quiero saber cuál es la diferencia entre put(...) y append(...) para un SparseArray?

De la documentación oficial:

  • append(...) : Pone un par clave / valor en la matriz, optimizando para el caso en que la clave es mayor que todas las claves existentes en la matriz.
  • put(...) : Agrega una asignación de la clave especificada al valor especificado, reemplazando la asignación anterior de la clave especificada si la hubo.

Pero simplemente no entiendo: s

Gracias por tu ayuda !

Me parece que la documentación es bastante sencilla:

Si agrega teclas secuenciales, como 1, 2, 3, 5, 7, 11, 13 …, use append() .

Si agrega claves no secuenciales, como 100, 23, 45, 277, 42 …, utilice put() .

No hay ninguna razón por la que no pueda usar put() en cualquiera de los escenarios, pero si sabe que las claves serán secuenciales, por ejemplo, al cargar datos desde el almacenamiento, append() le dará una ventaja de rendimiento.

Esencialmente hacen lo mismo. De hecho el código para los usos del append pone :

  /** * Puts a key/value pair into the array, optimizing for the case where * the key is greater than all existing keys in the array. */ public void append(int key, E value) { if (mSize != 0 && key <= mKeys[mSize - 1]) { **put(key, value);** return; } if (mGarbage && mSize >= mKeys.length) { gc(); } int pos = mSize; if (pos >= mKeys.length) { int n = ArrayUtils.idealIntArraySize(pos + 1); int[] nkeys = new int[n]; Object[] nvalues = new Object[n]; // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); System.arraycopy(mValues, 0, nvalues, 0, mValues.length); mKeys = nkeys; mValues = nvalues; } mKeys[pos] = key; mValues[pos] = value; mSize = pos + 1; } 

Entonces cuál es la diferencia? Como se puede ver en el código fuente, si la clave es mayor que todas las claves existentes en la matriz, el código creará un nuevo tamaño de matriz optimizada, copiar todas las claves / valores en la nueva matriz y agregar la nueva clave en la parte superior De la matriz.

¿Cuándo debe usarlo? Si las claves son secuenciales, obtendrás una ventaja de rendimiento, ya que sabes que la siguiente clave que vas a utilizar es mayor que las teclas que usaste antes (bueno, eso es lo que significa secuencial :-)), así que Saber que usted va a necesitar para crecer el arsenal. Si sus claves no son secuenciales, bien en ese caso usted tiene que "gastar" la energía de la CPU cada vez que agregue una nueva clave para averiguar si la clave que está agregando requiere el código para hacer crecer la matriz o no. Un arreglo grande con muchas llaves / valores y entradas de la llave / valor, que puede ser un pedacito de un degradador del funcionamiento.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.