如何通过索引同步删除列表中的元素?

时间:2014-07-31 10:55:11

标签: java android list arraylist

我有List张卡片,Card是一个班级。而且我有三只手,每只手都被交给四张牌。

onTouchEvent内的游戏中我必须在MotionEvent.ACTION_UP内删除被触摸的卡,问题是:

如果手中的可用卡ID如下:100,130,112,70,各自的余数:0,1,2,3。当我想删除被触摸的卡时,indeces重新洗牌,例如,

(100,130,112,70)->(0,1,2,3) delete(1)==>130 will be deleted

(100,112,70)->(0,1,2) delete (2) ==> 70 will be deleted and NOT 112.

(100,112)->(0,1) delete (3) ==> an OUT_OF_BOUND exception will be thrown.

如何避免这种情况,我试图通过参考列表中的每个元素比例来删除元素,但它很复杂。

3 个答案:

答案 0 :(得分:2)

请参阅SparseArray(其中有很多)...如果我找到了你正确的你需要的东西。 它基本上是一种哈希映射,但它的开销较小。

答案 1 :(得分:1)

使用您当前的实现,您只需从最高索引开始的列表中删除,移至最低位置:

(100,130,112,70)->(0,1,2,3) delete(3)==>70 will be deleted.
(100,130,112)->(0,1,2) delete (2) ==> 112 will be deleted.
(100,130)->(0,1) delete (1) ==> 130 will be deleted.

但是,将卡片存放在卡片Map或ID中可能会更好。这样你就可以简单地通过ID删除而不必担心它的索引。

答案 2 :(得分:0)

您可以在内部将卡存储在地图中 - 这样,键(索引)将保持不变。

但是,选择要删除的卡索引的逻辑是可疑的 - 当你只想删除2张卡时,为什么你的代码想要删除索引3?当你想删除索引1上的卡时,为什么选择索引2? / p>