[英]removing special element from an 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--;
}
}
請幫我謝謝
我建議您從list
獲取一個Iterator
,並使用iter.hasNext()
, iter.next()
和iter.remove()
,如下所示:
Iterator<Point> iter = list.iterator();
while (iter.hasNext())
if (iter.next().getAngle() > pivot.getAngle())
iter.remove();
另一個選擇是將它們放置在SortedMap
,讓角度代表鍵,然后使用tailMap(pivot.getAngle())
來獲得角度大於樞軸的那些點。
每當刪除元素時,它都會將以下元素的索引向下移動1。最簡單的解決方法是反向:
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i).getAngle() > pivot.getAngle() ) {
list.remove(i);
}
}
刪除該元素時,還應降低索引值( i
),否則它將跳過下一個值-因為這些值將發生偏移。 例如,假設您最初具有值{ a, b, c, d, e }
。 在i==2
的迭代中,您將看到c
。 如果然后刪除c
,則留下{ a, b, d, e }
... ...當for
語句的迭代部分中i
增至3時,這意味着list.get(i)
將返回e
因此你永遠不會看d
。
您可以通過添加i--;
來解決此問題i--;
if
塊中的語句...但更簡單的方法是從頭開始向后工作:
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i).getAngle() > pivot.getAngle()) {
list.remove(i);
}
}
或者,你可能要考慮創建一個新的列表,它僅包含你想保留的元素:
List<Foo> validValues = new ArrayList<Foo>();
for (Foo foo : list) {
if (foo.getAngle() <= pivot.getAngle()) {
validValues.add(foo);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.