日期:2014-05-20  浏览次数:20739 次

ArrayList 的删除的小问题,在线等
ArrayList的初始化内容如下:
  ArrayList list = new ArrayList();
  list.add("java");
  list.add("aaa");
  list.add("java");
  list.add("java");
  list.add("bbb");
下面可以删除list中所有的“java”的代码是:

A.for (int i = list.size() - 1; i >= 0; i--) {
  if ("java".equals(list.get(i))) {
  list.remove(i);
  }
  }

B.for (int i = 0; i < list.size(); i++) {
  if ("java".equals(list.get(i))) {
  list.remove(i);
  }
  }

请问,为什么只有A可行,B为什么不行呢 thanks

------解决方案--------------------
B 当你第一次移除的时候是1个 也就是list.remove(0),当循环进行到 i=3时 你之前 已经移除了 0 1 2,也就是移除了三个,而你的集合里面总共才五个值 移除了三个了 最后只剩下两个了,当你再去移除list.remove(3)时,而3根本不存在了,会出现数组越界异常的。
------解决方案--------------------
B : list.remove(i);后面加上i--
------解决方案--------------------
B,当然不行,比如B中,起始的时候 for循环中 i < 5 , 删除掉一个,那么list.size() = 4,那么 此时
list.get(3)才是list的最后一个元素 ,而for循环中 i会一直循环到 4,此时 list.get(4),报 list越界啦
------解决方案--------------------
两种写法都是错误的 会数组越界,
A.for (int i = list.size() - 1; i >= 0; i--) {
if ("java".equals(list.get(i))) {
list.remove(i);
i= i+1 ;
}
}

B.for (int i = 0; i < list.size(); i++) {
if ("java".equals(list.get(i))) {
list.remove(i);
 i= i-1 ;

}
}


------解决方案--------------------
探讨
B : list.remove(i);后面加上i--

------解决方案--------------------
我也错了,A也应该i--
------解决方案--------------------
探讨
两种写法都是错误的 会数组越界,
A.for (int i = list.size() - 1; i >= 0; i--) {
if ("java".equals(list.get(i))) {
list.remove(i);
i= i+1 ;
}
}

B.for (int i = 0; i < list.size(); i++) {
if ("java……

------解决方案--------------------
A数组会越界,B不会,所以A可以B不行
------解决方案--------------------
探讨
引用:
两种写法都是错误的 会数组越界,
A.for (int i = list.size() - 1; i >= 0; i--) {
if ("java".equals(list.get(i))) {
list.remove(i);
i= i+1 ;
}
}

B.for (int i = 0; i < list.size(); i++) {
if ("jav……

------解决方案--------------------
探讨
A数组会越界,B不会,所以A可以B不行

------解决方案--------------------
探讨

引用:
B : list.remove(i);后面加上i--

看好他的i是定义在 for后面的括号里,i--木有用的,=_=!

------解决方案--------------------
啊啊啊啊 我太粗心了,,悲剧
第一种写法是正确的 ,其实看了这个题,以后又知道一种删除List元素不用去管越界问题的写法了,杂以前没想到呢,童鞋些有这种感觉吗
------解决方案--------------------
list集合自动前移的问题:
list集合中删除前一元素,后边的元素会自动前移,即原来5个元素,删除后就只有0-4位置的元素了,这样肯定出现问题。所以删除元素从后到前。
------解决方案--------------------

Java code