关于List.remove在for循环中出现问题的解决方案
2016-12-29 14:18
323 查看
在java中对list进行操作很频繁,特别是进行list启遍历,这些操作我们都会,也很熟悉,但是对java中list进行删除元素,remove list中的元素就不怎么熟悉了吧,可以说很陌生,是实际操作中也很容易出错,先看看下面这个java中如何remove list 中的元素吧.
public class test {
public static void main(String[] args)
{
String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0;
i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
}
}
System.out.println("after remove:list.size()=" + list.size());
}
}
大家觉得这个程序打印出来的结果是多少呢?
Java代码
运行结果不是:
list.size()=5
after remove:list.size()=0
而是:
Java代码
list.size()=5
after remove:list.size()=2
这是怎么回事呢?到底要如何remove list 中的元素呢?
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
怎么解决?有三种方法可以解决这个问题:
1.倒过来遍历list
Java代码
for (int i
= list.size()-1; i > =0; i--)
{
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
}
}
2.每移除一个元素以后再把i移回来
Java代码
for (int i
= 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
i=i-1;
}
}
3.使用iterator.remove()方法删除
Java代码
if (null != list && list.size() > 0) {
Iterator it = list.iterator();
while(it.hasNext()){
Student stu = (Student)it.next();
if (stu.getStudentId() == studentId) {
it.remove(); //移除该对象
}
}
}
public class test {
public static void main(String[] args)
{
String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0;
i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
}
}
System.out.println("after remove:list.size()=" + list.size());
}
}
大家觉得这个程序打印出来的结果是多少呢?
Java代码
运行结果不是:
list.size()=5
after remove:list.size()=0
而是:
Java代码
list.size()=5
after remove:list.size()=2
这是怎么回事呢?到底要如何remove list 中的元素呢?
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
怎么解决?有三种方法可以解决这个问题:
1.倒过来遍历list
Java代码
for (int i
= list.size()-1; i > =0; i--)
{
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
}
}
2.每移除一个元素以后再把i移回来
Java代码
for (int i
= 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde"))
{
list.remove(i);
i=i-1;
}
}
3.使用iterator.remove()方法删除
Java代码
if (null != list && list.size() > 0) {
Iterator it = list.iterator();
while(it.hasNext()){
Student stu = (Student)it.next();
if (stu.getStudentId() == studentId) {
it.remove(); //移除该对象
}
}
}
相关文章推荐
- 关于List.remove在for循环中出现问题的解决方案
- 关于List.remove在for循环中出现问题的解决方案
- 关于js加载iframe出现空白问题的解决方案
- 关于出现List的java.util.ConcurrentModificationException异常问题的解决
- jsp关于include html、jsp等文件出现乱码问题的解决方案
- 关于出现WARNING: unable to write jarlist cache file ...\appcompat_v7\bin\jarlist.cache 问题详解
- 关于自定义迭代器类出现的问题可能解决方案
- 关于Java设置环境变量后的调试出现问题的解决方案
- 关于android中出现"ADB server didn't ACK"这个问题解决方案
- 关于Eclipse调试Hadoop所出现的一些问题及解决方案
- 【转】关于AES256算法java端加密,ios端解密出现无法解密问题的解决方案
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- 关于Devexpress xtraGrid中数字字段删除数字后出现输入字符串格式不正确问题的解决方案
- 关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
- 关于以前应用程序运行出现配置错误的问题的解决方案
- 关于PC套件显示红外连接出现问题而导致连接不上的解决方案(zz)
- 关于PC套件显示红外连接出现问题而导致连接不上的解决方案(zz)
- 关于自定义BaseAdapter listAdapter时,出现超低级问题
- 关于List的一个小问题——remove()函数
- 关于MFC中数据库操作中遇到的问题:Microsoft C++ 在xxx内存处出现问题_com_error的另一解决方案