java中for循环删除集合陷阱

网友投稿 211 2023-08-02


java中for循环删除集合陷阱

首先看下面的代码:

import java.util.LinkedList;

import java.util.List;

public class DeleteCollection {

public static void main(String[] args) {

List list = new LinkedList();

list.add("a");

list.add("b");

list.add("c");

list.add("d");

list.add("e");

for(int i=0;i

list.remove(i);

}

System.out.println("还剩余的元素个数:"+list.size());

}

}

上述的代码按照思路应该是对的,输出的结果也应该NYidz是0

看下面实际输出的结果:

还剩余的元素个数:2

你也许会问为什么呢?因为集合的大小是动态变化的,当你删除一个元素之后,元素中的序号又重新排列,原来第二个应该删除的元素现在排在了第一个元素的位置,真正删除的却是第三个元素,依次类推,删除的是第一个、第三个、第五个、、、、如果在原来删除的代码中加入语句:System.out.println("即将删除的元素:"+list.get(i));即可验证。

加入上述语句后输出的结果:

即将删除的元素:a

即将删除的元素:c

即将删除的元素:e

还剩余的元素个数:2

解决办法:

究其原因是因为你要删除的元素往前面移动了,而你的i保存的值依旧往后走,所以如果让i不往后走,往前走一个,即可删除本来排在第二个位置的元素现在排在了第一个位置上的元素。

更改后的核心代码:

for(int i=0;i

System.out.println("即将删除的元素:"+list.get(i));

list.remove(i);

i--;

}

结果:

即将删除的元素:a

即将删除的元素:b

即将删除的元素:c

即将删除的元素:d

即将删除的元素:e

还剩余的元素个数:0

以上所述就是本文的全部内容了,希望大家能够喜欢。

list.remove(i);

}

System.out.println("还剩余的元素个数:"+list.size());

}

}

上述的代码按照思路应该是对的,输出的结果也应该NYidz是0

看下面实际输出的结果:

还剩余的元素个数:2

你也许会问为什么呢?因为集合的大小是动态变化的,当你删除一个元素之后,元素中的序号又重新排列,原来第二个应该删除的元素现在排在了第一个元素的位置,真正删除的却是第三个元素,依次类推,删除的是第一个、第三个、第五个、、、、如果在原来删除的代码中加入语句:System.out.println("即将删除的元素:"+list.get(i));即可验证。

加入上述语句后输出的结果:

即将删除的元素:a

即将删除的元素:c

即将删除的元素:e

还剩余的元素个数:2

解决办法:

究其原因是因为你要删除的元素往前面移动了,而你的i保存的值依旧往后走,所以如果让i不往后走,往前走一个,即可删除本来排在第二个位置的元素现在排在了第一个位置上的元素。

更改后的核心代码:

for(int i=0;i

System.out.println("即将删除的元素:"+list.get(i));

list.remove(i);

i--;

}

结果:

即将删除的元素:a

即将删除的元素:b

即将删除的元素:c

即将删除的元素:d

即将删除的元素:e

还剩余的元素个数:0

以上所述就是本文的全部内容了,希望大家能够喜欢。

System.out.println("即将删除的元素:"+list.get(i));

list.remove(i);

i--;

}

结果:

即将删除的元素:a

即将删除的元素:b

即将删除的元素:c

即将删除的元素:d

即将删除的元素:e

还剩余的元素个数:0

以上所述就是本文的全部内容了,希望大家能够喜欢。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中支持可变参数详解
下一篇:javax.mail.SendFailedException: Sending failed问题原因
相关文章

 发表评论

暂时没有评论,来抢沙发吧~