如何删除列表中的特定元素?
...
java.util.List<Polygon> triangles = new LinkedList<Polygon>();
Point startDrag, endDrag, midPoint;
Polygon triangle;
....
int[] xs = { startDrag.x, endDrag.x, midPoint.x };
int[] ys = { startDrag.y, startDrag.y, midPoint.y };
triangles.add( new Polygon(xs, ys,3));
....
public void mouseClicked(MouseEvent e) {
...
startDrag = new Point(e.getX(), e.getY());
for (Polygon p:triangles){
if (p.contains(startDrag)) //Polygon has a 'contains(Point)' method
remove (p.contains(startDrag));
}
....
答案 0 :(得分:3)
要按对象移除,例如从三角形列表中删除特定三角形,请使用List :: remove(Object)
出于上述目的,您可能希望使用List::listIterator()。类似的东西:
ListIterator<Polygon> it = triangles.listIterator();
while (it.hasNext()) {
if (it.next().contains(startDrag)) {
it.remove();
break;
}
}
答案 1 :(得分:2)
如果您正在迭代该对象,则无法从triangles
列表中删除该对象。如果您尝试这样做,则会触发ConcurrentModificationException
。相反,你应该做的是制作一份列表副本并对其进行迭代,当你获得点击时,从原始项目中删除该项目:
public void mouseClicked(MouseEvent e) {
...
Polygon[] triArray = triangles.toArray(new Polygon[triangles.size()]);
startDrag = new Point(e.getX(), e.getY());
for (Polygon p:triArray){
if (p.contains(startDrag)) //Polygon has a 'contains(Point)' method
triangles.remove (p);
}
....
答案 2 :(得分:0)
这是一个讨厌的,我挖了它 - 它是来自Mouse Clicked的系统线程被识别为不是java.util.Thingamabob的创建者(明天将发布的新数据结构)
尽管有文档,但与常识一致,实际上是什么东西看到来自MouseClicked的线程不是创建的线程
java.util.List<Polygon> triangles
使用线程ID的顺序或者诸如线程命名之类的东西然后从JVM深处抛出一个异常(在C端设置异常标志)然后返回让你没有正常运行的exception.getMessage() .....
你可以实现复制语义,并且原始版本可以工作,对你的大脑做一些点扭曲但是它有效。