java从ArrayList中删除int[]
我正在尝试从ArrayList中删除int[]。 由于我的代码,我只有这些值,所以我正在创建数组,然后调用remove()
int[] pos = new int[]{0,1};
positionList.remove(pos);
位置列表是对应的阵列列表
这实际上不起作用。除了像这样反复浏览列表,还有其他可能性吗
for (int[] pos : positionList) {
if (posX == pos[0] && posY == pos[1]) {
positionList.remove(pos);
break;
}
}
# 1 楼答案
使用数组来保存不是项目序列的数据是一种不好的做法
您的数组实际上是一个具有两个不同feld的数据保持器。 定义一个坐标类并重写
Object.equals(Object)
。然后,您的代码将变得更加干净:您应该猜测如何定义
MyPoint
# 2 楼答案
看看
posX
和posY
,我很好奇像ArrayList<Point>
这样的东西对您来说是否是更好的解决方案remove
找不到数组的原因是新数组与集合中已存在的数组不匹配如果您创建了自己的
Point
类,那么您可以@Override equals
按照自己的意愿进行操作,并且只需调用remove(new Point(posX, posY))
您也应该考虑有一个^ {CD9>},因为实现提供了更快的移除(^ {CD10>}对于^ {CD11>},^ {CD12>} ^ ^})。记住
@Override hashCode
(如果你@Override equals
,你无论如何都必须这么做),如果你想使用TreeSet
或者需要在其他上下文中对点进行排序,那么就制作Point implements Comparable<Point>
(或者提供一个外部Comparator<Point>
)如果您的^ {< CD19>}有很多元素,并且自定义^ {< CD6>}类不适用,那么您可能需要考虑切换到^ {CD21>}(参见:有效java第二版< EEM>,项目25:首选列表到数组)。它具有您需要的
equals
行为。速度较慢,但可能仍然足够快最后,如果您坚持使用}分别使用{}和{}
int[]
,您可以将其包装到您自己的IntArray
类中,并使用ArrayList<IntArray>
@Override equals
和{