从arrayList中删除特殊元素

use*_*221 1 java arraylist

嗨我写了这部分代码.在for循环之前我有这个arraylist:

[X :49.0 Y: 113.0 , angle :0.0, X :141.0 Y: 106.0 , angle :0.0, X :110.0 Y: 185.0 , angle: 1.0768211289482128, X :99.0 Y: 139.0 , angle: 1.9961041242180873, X :103.0 Y: 126.0 , angle : 2.4208694638343324] 这表明"x" and "y" and "angle"了一些观点.但在for循环中我想删除那些超过的元素

X :110.0 Y: 185.0 , angle: 1.0768211289482128

但它为我打印这个数组:

[X :49.0 Y: 113.0angle0.0, X :141.0 Y: 106.0 , angle:0.0, X :110.0 Y: 185.0 , angle: 1.0768211289482128, X :103.0 Y: 126.0 , angle: 2.4208694638343324] 哪个不对

 int size  = list .size();
    for (int i=0;i<size;i++) {
        if (list.get(i).getAngle() > pivot.getAngle() ) {
            list.remove(i);
            size--;

        }
    }
Run Code Online (Sandbox Code Playgroud)

请帮我谢谢

aio*_*obe 6

我建议你得到一个Iterator从list和使用iter.hasNext(),iter.next()并且iter.remove(),像这样:

 Iterator<Point> iter = list.iterator();
 while (iter.hasNext())
     if (iter.next().getAngle() > pivot.getAngle())
         iter.remove();
Run Code Online (Sandbox Code Playgroud)

另一种选择是将它们放入a中SortedMap,让角度代表键,并用于tailMap(pivot.getAngle())获得角度大于枢轴的那些点.

  • 这个答案比其他人好得多(+1) (2认同)

Lau*_*ves 5

每当你删除一个元素时,它会将以下元素的索引向下移动1.最简单的解决方法是反过来:

for (int i  = list.size() - 1; i >= 0; i--) {
    if (list.get(i).getAngle() > pivot.getAngle() ) {
        list.remove(i);
    }
}
Run Code Online (Sandbox Code Playgroud)