首先看下面的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import java.util.LinkedList; import java.util.List; public class DeleteCollection { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add( "a" ); list.add( "b" ); list.add( "c" ); list.add( "d" ); list.add( "e" ); for ( int i= 0 ;i<list.size();i++){ //循環(huán)刪除集合中的元素 list.remove(i); } System.out.println( "還剩余的元素個數:" +list.size()); } } |
上述的代碼按照思路應該是對的,輸出的結果也應該是0
看下面實際輸出的結果:
還剩余的元素個數:2
你也許會問為什么呢?因為集合的大小是動態(tài)變化的,當你刪除一個元素之后,元素中的序號又重新排列,原來第二個應該刪除的元素現在排在了第一個元素的位置,真正刪除的卻是第三個元素,依次類推,刪除的是第一個、第三個、第五個、、、、如果在原來刪除的代碼中加入語句:System.out.println("即將刪除的元素:"+list.get(i));即可驗證。
加入上述語句后輸出的結果:
即將刪除的元素:a
即將刪除的元素:c
即將刪除的元素:e
還剩余的元素個數:2
解決辦法:
究其原因是因為你要刪除的元素往前面移動了,而你的i保存的值依舊往后走,所以如果讓i不往后走,往前走一個,即可刪除本來排在第二個位置的元素現在排在了第一個位置上的元素。
更改后的核心代碼:
1
2
3
4
5
|
for ( int i= 0 ;i<list.size();i++){ System.out.println( "即將刪除的元素:" +list.get(i)); list.remove(i); i--; } |
結果:
即將刪除的元素:a
即將刪除的元素:b
即將刪除的元素:c
即將刪除的元素:d
即將刪除的元素:e
還剩余的元素個數:0
以上所述就是本文的全部內容了,希望大家能夠喜歡。