java意外循环出现
我有一个数组列表,里面有500个点对象。可能有重复的,所以我想找到他们,如果需要删除他们,除了一个。计划是:检查arrayList中的每个点,如果有相等的点,如果有,将其添加到列表中,在测试每个点后,从原始列表中删除toRemove列表中的所有点
但问题来了:如果我运行这个,它将进入一个无休止的循环。我有严重的思维错误吗?我想这可能是一个很简单的失误,但我想不起来
另外,如果你对如何做得更好有任何建议,请告诉我
这是我的方法:
private void checkForDuplicates() {
ArrayList <Point> toRemove=new ArrayList<Point>();
int i=0;
while(i<points.size()) {
Point local=points.get(i);
for (Point p: points) {
if (local!=p && local.equals(p)) {
toRemove.add(p);
}
}
for (Point p: toRemove) {
points.remove(p);
}
i++;
}
}
更新:
有些东西真的坏了。看起来这个方法现在可能行得通,但我的程序不行。如果我在某处调用此方法,代码将不再运行。当我在其他地方调用checkForDuplicates()
时,我甚至不能在控制台上打印出一些东西作为主方法的第一行
要点:
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public boolean equals(Object p) {
if (this == p) {
return true;
}
if (!(p instanceof Point)) {
return false;
}
Point point = (Point) p;
return this.getX() == point.getX() && this.getY() == point.getY();
}
}
# 1 楼答案
我建议使用流来完成此任务:
要使
distinct()
按预期工作,您可能需要为Point
类定义一个equals()
方法