sparseArray 遍历

1.  看来我找到了解决办法。我还没有正确的人注意 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.  对于我不认为SparseArray作为一个成熟的集合。既然你不能得到一组键,你怎么能找回在这个“暗不明”收集您的 数据 。 它看起来你是把 数据存储 在一个有序的方式无间隙。用一个简单的列表,它会做的正是这一点。 yourlist.get(I)。 列表是可迭代的! 

6.  Ooor你刚刚创建自己的ListIterator:
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 UnsupportedOperationException(); } @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.  RUZANNA的回答修改,以把 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));
		}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值