我正在尝试从 ArrayList 中删除一个 int[]。 由于我的代码我只有值所以我创建数组然后调用 remove();
int[] pos = new int[]{0,1};
positionList.remove(pos);
positionList是对应的ArrayList
这实际上行不通。除了像
这样遍历列表之外还有另一种可能性吗?for (int[] pos : positionList) {
if (posX == pos[0] && posY == pos[1]) {
positionList.remove(pos);
break;
}
}
最佳答案
查看 posX
和 posY
,我很好奇是否有类似 ArrayList<Point>
的东西对您来说是更好的解决方案。
remove
的原因找不到数组是因为新数组不是 equals
到集合中已有的数组。
(new int[0]).equals(new int[0]) // false!
如果您创建自己的 Point
类,然后你可以@Override equals
随心所欲,你可以简单地调用remove(new Point(posX, posY))
.
您还应该考虑拥有一个 Set<Point> positionList
相反,因为实现提供了更快的删除( O(1)
用于 HashSet
, O(log N)
用于 TreeSet
)。记得@Override hashCode
(如果你 @Override equals
无论如何你必须这样做),然后制作 Point implements Comparable<Point>
(或提供外部 Comparator<Point>
)如果你想使用 TreeSet
或者需要在其他上下文中对点进行排序。
如果您的 int[]
有很多元素和自定义 Point
类不适用,那么您可能需要考虑切换到 List<Integer>
相反(另请参阅:Effective Java 2nd Edition,第 25 条:列表优于数组)。它有 equals
你需要的行为。它速度较慢,但可能仍然足够快。
最后,如果你坚持使用int[]
, 你可以把它包裹在你自己的里面 IntArray
类,并有一个 ArrayList<IntArray>
反而。 @Override equals
和 hashCode
使用 Arrays.equals(int[], int[])
, 和 hashCode(int[])
分别。
关于java - 从 ArrayList<int[]> 中删除 int[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388277/