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

Java 如何通过索引同步删除列表中的元素?,java,android,list,arraylist,Java,Android,List,Arraylist,我有一张卡片的列表,卡片是一个类。我有三手牌,每手牌对应四张牌 在onTouchEvent内的游戏中,当触摸卡处于运动事件时,我必须将其删除。操作_UP,问题是: 如果一只手上的可用卡ID如下:100130112,70,相应的索引为:0,1,2,3。例如,当我想删除被触摸的卡片时,indeces重新洗牌 (100130112,70)->(0,1,2,3)删除(1)==>130将被删除 (100112,70)->(0,1,2)删除(2)=>70将被删除,而不是112。 (100112)->(0,1

我有一张卡片的
列表
卡片
是一个类。我有三手牌,每手牌对应四张牌

onTouchEvent
内的游戏中,当触摸卡处于
运动事件时,我必须将其删除。操作_UP
,问题是:

如果一只手上的可用卡ID如下:100130112,70,相应的索引为:0,1,2,3。例如,当我想删除被触摸的卡片时,indeces重新洗牌

(100130112,70)->(0,1,2,3)删除(1)==>130将被删除

(100112,70)->(0,1,2)删除(2)=>70将被删除,而不是112。

(100112)->(0,1)delete(3)=>将抛出绑定外异常。

如何避免这种情况,我尝试通过引用列表中的每个元素的比率来删除元素,但这很复杂。

请参阅SparseArray(其中有很多)…如果我没有弄错,这正是您需要的。 它基本上是一种散列映射,但开销较小。

请参见SparseArray(有很多)…如果我没弄错的话,它正是您需要的。 它基本上是一种散列映射,但开销较小。

请参见SparseArray(有很多)…如果我没弄错的话,它正是您需要的。 它基本上是一种散列映射,但开销较小。

请参见SparseArray(有很多)…如果我没弄错的话,它正是您需要的。
它基本上是一种哈希映射,但开销较小。

使用当前的实现,您只需从列表中从最高索引开始删除,然后移动到最低索引:

(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.

不过,您最好将卡存储在
地图
或卡的ID中。通过这种方式,您可以简单地按ID删除,而不必担心其索引。

使用当前的实现,您可以简单地从列表中删除,从最高索引开始,移动到最低索引:

(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.

不过,您最好将卡存储在
地图
或卡的ID中。通过这种方式,您可以简单地按ID删除,而不必担心其索引。

使用当前的实现,您可以简单地从列表中删除,从最高索引开始,移动到最低索引:

(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.

不过,您最好将卡存储在
地图
或卡的ID中。通过这种方式,您可以简单地按ID删除,而不必担心其索引。

使用当前的实现,您可以简单地从列表中删除,从最高索引开始,移动到最低索引:

(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.

不过,您最好将卡存储在
地图
或卡的ID中。通过这种方式,您可以简单地按ID删除,而不必担心其索引。

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


然而,选择要删除的卡的索引的逻辑是可疑的-当只有两张卡时,代码为什么要删除索引3?当您要删除索引1上的卡时,为什么要选择索引2?

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


然而,选择要删除的卡的索引的逻辑是可疑的-当只有两张卡时,代码为什么要删除索引3?当您要删除索引1上的卡时,为什么要选择索引2?

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


然而,选择要删除的卡的索引的逻辑是可疑的-当只有两张卡时,代码为什么要删除索引3?当您要删除索引1上的卡时,为什么要选择索引2?

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



然而,选择要删除的卡的索引的逻辑是可疑的-当只有两张卡时,您的代码为什么要删除索引3?当您要删除索引1上的卡时,为什么要选择索引2?

您应该按id删除该卡。@Luksprog yes,但是我还需要引用每一张卡片的索引,你应该使用数据结构,比如ArrayList或者类似的,没有索引值关系的东西。因为你的卡迪德本身是独一无二的。因此,正如@Luksprog所评论的那样,它将帮助您通过ID直接删除该卡。我猜您当前正在使用数组作为数据结构。您可以使用带int键的哈希映射而不是列表。您应该按id删除卡。@Luksprog是的,但我还需要引用每个卡的索引。您应该使用数据结构,如ArrayList或类似的,没有索引值关系的数据结构。因为你的卡迪德本身是独一无二的。因此,正如@Luksprog所评论的那样,它将帮助您通过ID直接删除该卡。我猜您当前正在使用数组作为数据结构。您可以使用带int键的哈希映射而不是列表。您应该按id删除卡。@Luksprog是的,但我还需要引用每个卡的索引。您应该使用数据结构,如ArrayList或类似的,没有索引值关系的数据结构。因为你的卡迪德本身是独一无二的。因此,正如@Luksprog所评论的那样,它将帮助您通过ID直接删除该卡。我猜您当前正在使用数组作为数据结构。您可以使用带int键的哈希映射而不是列表。您应该按id删除卡。@Luksprog是的,但我还需要引用每个卡的索引。您应该使用数据结构,如ArrayList或类似的,没有索引值关系的数据结构。因为你的卡迪德本身是独一无二的。因此,正如@Luksprog所评论的那样,它将帮助您通过ID直接删除该卡。我猜您当前使用的是数组作为数据结构。您可以使用带有int键的哈希映射,而不是ListMap。每只手牌有四张牌0-3,当用户选择一张牌时,这张牌会自动关闭