軟體構造遍歷list刪除元素方法總結

2021-10-23 01:49:15 字數 1337 閱讀 1213

在做軟體構造lab2時,忽然遇到的問題,老師上課其實將來,下面來彙總一下有關遍歷list然後刪除元素的方法,以lab2的set函式中刪除邊為例(這個函式是建立新編,但是如果兩點間已存在邊,則刪除原有邊再添新邊)

目前姑且有三種方法:

1.
for

(int i=

0;i< edges.size;i++

)}

這裡個**其實會引發錯誤,因為edges.size會隨著你的刪減而編號,list中的元素編號也會發生變換,而這個**並沒有發現。稍微修改改一下如下:

for

(int i=

0;i< edges.size;i++

)}

由於我們想要刪除的有向邊只有乙個或者乾脆沒有,所有,可以在刪除後直接break返回。

或者讓size成為乙個我們可控的值。:

int size=edges.size;

for(

int i=

0;i< size;i++

)}

2.
for

(edge i:edges)

}

這裡如果不加break,問題和1方法中的問題一樣,edges.size會隨著你的刪減而編號,list中的元素編號也會發生變換,而這個**並沒有發現,所以只能實現刪除乙個元素。

3.
iterator

it = edges.

iterator()

;while

(it.

hasnext()

)}

這種方法能夠實現刪除多個元素,要注意這裡的刪除要用iterator的刪除方法,不能用list中的刪除方法,否則會報錯concurrentmodificationexception,原因於之前相同。

這類錯誤具體的分析如下:

就是說我們在用subjects刪除時,iter是不知道的,從而導致了錯位,因此我們在呼叫iterator時就只能用iterator的方法進行刪除。

參考**:

List集合遍歷刪除元素

j a三種遍歷如何進行list的遍歷刪除 1 for迴圈 常見錯誤寫法 由於下標問題達不到想要效果 for int i 0 i應該改為 倒序操作避免下標問題 int size list.size for int i size 1 i 0 i 2 增強for迴圈 foreach迴圈 常見錯誤 會丟擲c...

遍歷刪除List中的元素

使用iterator的方式可以順利刪除和遍歷 正確方式 public void iteratorremove system.out.println students 使用增強的for迴圈 錯誤方式 在迴圈過程中從list中刪除非基本資料型別以後,繼續迴圈list時會報concurrentmodifi...

List的遍歷和刪除元素

遍歷list的方法 param args public static void main string args 索引值 i 遞減 優點 可以獲取索引值 可以刪除元素 system.out.println 1.for迴圈 1.2 索引值 i 遞減 for int i list.size 1 i 0 ...