簡體   English   中英

從arrayList中刪除特殊元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM