Java 从ArrayList中删除int[<;int[]>;
我正在尝试从ArrayList中删除int[]。 由于我的代码,我只有这些值,所以我正在创建数组,然后调用remove() 位置列表是对应的阵列列表 这实际上不起作用。除了像这样反复浏览列表,还有其他可能性吗Java 从ArrayList中删除int[<;int[]>;,java,arraylist,Java,Arraylist,我正在尝试从ArrayList中删除int[]。 由于我的代码,我只有这些值,所以我正在创建数组,然后调用remove() 位置列表是对应的阵列列表 这实际上不起作用。除了像这样反复浏览列表,还有其他可能性吗 for (int[] pos : positionList) { if (posX == pos[0] && posY == pos[1]) { positionList.remove(pos); break; } } 看看posX和posY,我很
for (int[] pos : positionList) {
if (posX == pos[0] && posY == pos[1]) {
positionList.remove(pos);
break;
}
}
看看
posX
和posY
,我很好奇像ArrayList
这样的东西对您来说是否是更好的解决方案
remove
找不到数组的原因是新数组与集合中已有的数组不相等
(new int[0]).equals(new int[0]) // false!
如果您创建自己的点
类,那么您可以@覆盖equals
以按照您的需要进行操作,并且您只需调用移除(新点(posX,posY))
您也应该考虑使用<代码>设置位置列表< /代码>,因为实现提供了更快的移除(<代码> O(1)< /代码> < <代码> HASSESET <代码> > <代码> O(log n)< />代码>代码>树目录。请记住
@覆盖hashCode
(如果@覆盖等于
,则无论如何都必须这样做),如果要使用树集
或需要在其他上下文中对点进行排序,请使点实现可比
(或提供外部比较器
)
如果您的<代码> INT[] /Cux>有很多元素,并且自定义<代码>点< /代码>类不适用,那么您可能需要考虑切换到等于的行为。速度较慢,但可能仍然足够快
最后,如果您坚持使用int[]
,您可以将其包装在自己的IntArray
类中,并使用ArrayList
@Override equals
和hashCode
分别使用数组。equals(int[],int[])
和hashCode(int[])
使用数组来保存不是项目序列的数据是一种不好的做法
您的数组实际上是一个具有两个不同feld的数据保持器。
定义坐标类并覆盖对象。等于(对象)
。然后,您的代码将变得更加干净:
ArrayList<MyPoint> positionList;
// fill list
MyPoint testPos = new MyPoint(0, 1);
positionList.remove(testPos);
ArrayList位置列表;
//填写清单
MyPoint testPos=新的MyPoint(0,1);
位置列表。移除(testPos);
您应该猜测如何定义MyPoint
。+1,以获得使用HashSet而不是列表的建议。ArrayList当然是最低效的临时删除集合。是的,我在回答中尝试以增量方式覆盖所有相关的基础。或者更好的是,在JDK中使用实际的Point2D或Point类,别忘了覆盖Object#hashCode()!Point2D有两个问题。首先,它是抽象的,因此Dimitri无论如何都需要编写一个类。其次,它使用double,而Dimitri使用整数。。我的主要观点是使用数据结构而不是数组。
ArrayList<MyPoint> positionList;
// fill list
MyPoint testPos = new MyPoint(0, 1);
positionList.remove(testPos);