在Java中,使用List時想要刪除某個特定個元素怎么辦?很好辦!因為List接口有remove()這個方法,我們只需要調用remove()方法,就可以刪除list中的某個元素。但是list自帶的有一些坑,在相鄰有相同元素時會掉坑:
使用list.remove()刪除:
我們看到有兩個“a”元素相鄰,但是刪除時卻只刪除了一個,這是為何呢?因為刪除時,每刪除一個元素,后邊的元素都會左移一位,也就是下標會減1,在for循環中,刪除第一個“a”時,i(下標)為0,此時list重排,后邊的元素全部左移1位,也就是說第二個“a”元素的下標從1變為了0,而此時for循環進行已經第二次循環了,執行了i++,i的值為1,對應為“b”元素,然后向后循環,再也找不到“a”元素了。所以相鄰元素有重復的話,只能刪除一個。這明顯不符合我們的需求。
那解決辦法是什么呢?
1.刪除后元素后,i-1

刪除一個元素后,后邊的元素左移1位,此時i-1,保證了下次循環能訪問到左移了1位的元素。
2.反向刪除
我們先從后邊的元素開始循環,一個一個的往前面循環,找出特定元素刪除
這樣,就算刪除了倒數第一個"a"元素,list重排,也只是把后邊的元素左移1位,此時倒數第一個“a”元素(下標為1)被刪除,接着b替代了a成為了下標為1的元素,但前邊的元素不變,i-- = 0 后依然能夠找到其相鄰的a元素。
3.使用迭代器刪除(iterator)(推薦)
4.賦值給新的list
注意:在進行普通for循環刪除時,不要把list.size()抽離出去賦值給變量,然后用此變量做為for條件, 因為刪除時,list.size()的值是會改變的,要把list.size作為for條件。