put(…)和append(…)之间的差别为SparseArray?

我只是想知道什么是put(...)append(...)之间的区别SparseArray?

从官方文档:

  • append(...) :将一个键/值对入数组中,针对键大于数组中所有现有键的情况进行优化。
  • put(...) :添加从指定键到指定值的映射,如果有指定键,则replace之前映射。

但我只是不明白:s

谢谢你的帮助 !

Solutions Collecting From Web of "put(…)和append(…)之间的差别为SparseArray?"

在我看来,文档是非常简单的:

如果添加顺序键,如append() …,请使用append()

如果添加非顺序键,例如100,23,45,277,42 …,请使用put()

没有理由在任何一种情况下都不能使用put() ,但是如果你知道这些键是顺序的,例如从存储中加载数据,那么append()会给你一个性能上的优势。

基本上他们做同样的事情。 实际上append用法的代码放在

  /** * 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; } 

那么区别是什么呢? 从源代码中可以看出,如果键大于数组中所有现有键,代码将创build一个新的大小优化数组,将所有键/值复制到新数组中,并将新键添加到顶部的数组。

你什么时候使用它? 如果你的密钥是连续的,那么你就会获得性能上的优势,因为你知道下一个要使用的密钥比你之前使用的密钥要大(这就是顺序的意思:-)),所以你知道你将需要增长arrays。 如果您的密钥不是连续的,那么在这种情况下,每次添加一个新密钥时都必须“花费”CPU能力,以确定要添加的密钥是否需要代码增长arrays。 包含许多键/值和键/值input的大型arrays,可能会降低性能。