1.
看来我找到了解决办法。我还没有正确的人注意
2.
如果你不关心键,然后
3.
至于其他人,这实在不是一个充实的类。你将无法做到这一点(只是)与
4.
答案是否定的
5.
对于我不认为SparseArray作为一个成熟的集合。既然你不能得到一组键,你怎么能找回在这个“暗不明”收集您的
数据
。 它看起来你是把
数据存储
在一个有序的方式无间隙。用一个简单的列表,它会做的正是这一点。 yourlist.get(I)。 列表是可迭代的!
6.
Ooor你刚刚创建自己的ListIterator:
7.
RUZANNA的回答修改,以把
keyAt(index)
功能。 所以我会用这样下去
int key = 0; for(int i = 0; i < sparseArray.size(); i++) { key = sparseArray.keyAt(i); // get the object by the key. Object obj = sparseArray.get(key); }
2.
valuesAt(int)
同时通过稀疏数组迭代直接访问这些值可以到。
for(int i = 0, nsize = sparseArray.size(); i < nsize; i++) { Object obj = sparseArray.valueAt(i); }
3.
SparseArray
。如果你需要遍历,你可能要一个
HashMap
。这是一个有点沉重,但它至少做什么,你需要做的-除非你真的需要额外的性能,在这种情况下,你就需要自己去可能。 4.
SparseArray
不提供它。如
pst
所说的那样,这件事情并没有提供任何接口。 你可以从循环
0 - size()
并跳过返回值
null
,但也差不多了。 当我说出我,如果你需要一个地图,而不是SpareArray。例如,通过按键使用TreeMap的其中迭代秩序。
TreeMap
5.
6.
public class SparseArrayIterator implements ListIterator { private SparseArray mArray; private int mCursor = -1; private boolean mCursorNowhere = true; public SparseArrayIterator(SparseArray array) { mArray = array; } public int currentKey() { if (!mCursorNowhere) { return mArray.keyAt(mCursor); } else { throw new IllegalStateException(); } } @Override public void add(E object) { throw new UnsupportedOperationExce ption(); } @Override public boolean hasNext() { return mCursor < mArray.size() - 1; } @Override public boolean hasPrevious() { return mCursorNowhere && mCursor >= 0 || mCursor > 0; } @Override public int nextIndex() { if (hasNext()) { return mCursor + 1; } else { throw new NoSuchElementException(); } } @Override public int previousIndex() { if (hasPrevious()) { if (mCursorNowhere) { return mCursor; } else { return mCursor - 1; } } else { throw new NoSuchElementException(); } } @Override public E next() { if (hasNext()) { if (mCursorNowhere) { mCursorNowhere = false; } mCursor++; return mArray.get(currentKey()); } else { throw new NoSuchElementException(); } } @Override public E previous() { if (hasPrevious()) { if (mCursorNowhere) { mCursorNowhere = false; } else { mCursor--; } return mArray.get(currentKey()); } else { throw new NoSuchElementException(); } } @Override public void remove() { if (!mCursorNowhere) { mArray.remove(currentKey()); mCursorNowhere = true; mCursor--; } else { throw new IllegalStateException(); } } @Override public void set(E object) { if (!mCursorNowhere) { mArray.put(currentKey(), object); } else { throw new IllegalStateException(); } } }
7.
key
代环声明中。 (有检查,以确保指数0是有效的)
if (sparseArray.size() == 0) return; for (int i = 0, key = spareArray.keyAt(i); i < sparseArray.size(); i++) { Object obj = sparseArray.get(key); }
//-----------------------------------------------------------------------------------
SparseIntArray sia = new SparseIntArray(); sia.put(12, 123); sia.put(12, 8784); // 覆写前面key为12的值 sia.put(154, 123); sia.put(15, 123); sia.put(17, 123); sia.put(18, 123); sia.put(19, 123); sia.put(22, 123); for (int i = 0; i < sia.size(); i++) { int key = sia.keyAt(i); System.out.println("key=" + key + ", value=" + sia.get(key)); }