【发布时间】:2019-11-18 17:05:06
【问题描述】:
注意:我必须使用 Java 8
我正在尝试从 Java ArrayList 中删除和添加对象,如下所示:
private List<Point> points;
[...]
void addPoint(int x, int y) {
Point newpoint = new Point(x, y);
if (!points.contains(newpoint)) {
points.add(new Point(x, y));
} else {
System.out.println("Error! Point already exists!");
}
}
void removePoint(int x, int y) {
Point newpoint = new Point(x, y);
if (points.removeIf(n -> n.equals(newpoint))) {
System.out.println("Point was removed!");
} else {
System.out.println("Error! Point does not exist!");
}
}
Point 是一个简单的对象,具有 x 和 y int 和 equals 方法,如果提供的 Point 对象具有相同的坐标,则返回 true。
如您所见,我正在检查对象是否存在然后添加它,在removePoint 中我使用removeIf(我认为这是次优的)从列表中删除该点。
那么如何通过覆盖equals 方法来正确解决这个问题并且removeIf 真的不是最理想的呢?
【问题讨论】:
-
removeIf是执行删除的最有效方法,如果您预计会出现多次。如果您希望最多有 1 个,请使用remove。 -
“和一个 equals 方法”我希望你也覆盖了
hashCode。 -
您真的需要
points成为List还是可以使用Set来代替?对于这个用例,HashSet看起来很整洁。 -
您确定,您不是在寻找订购的
Set吗?读取这些数据的查询到底是什么? -
如果你需要维护元素的插入顺序,那么你应该使用
LinkedHashSet。