黑马程序员技术交流社区

标题: List集合的题 [打印本页]

作者: davy0119    时间: 2016-1-22 20:12
标题: List集合的题
  1. public class CollectionDemo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 ArrayList<String> list= new ArrayList<String>();
  7.                 list.add("java");
  8.                 list.add("aaa");
  9.                 list.add("java");
  10.                 list.add("java");
  11.                 list.add("bbb");
  12.                 for (int i = 0; i < list.size(); i++) {
  13.                         if ("java".equals(list.get(i))) {
  14.                         list.remove(i);
  15.                         }
  16.                         }
  17.                 System.out.println(list);
  18. }        
  19. }
复制代码

为什么输出还有“java”
输出是aaa,java,bbb

作者: davy0119    时间: 2016-1-22 20:39
顶第三方发发发发
作者: ConsciousStream    时间: 2016-1-22 22:10
在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加,碰到连续一样的元素的话会跳过后一个。
作者: davy0119    时间: 2016-1-22 22:13
没人知道吗
作者: davy0119    时间: 2016-1-22 22:15
ConsciousStream 发表于 2016-1-22 22:10
在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加 ...

谢谢,
作者: yi651312197    时间: 2016-1-22 23:41
三楼说得对
作者: PeterPang    时间: 2016-1-22 23:48
说的对。在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加,碰到连续一样的元素的话会跳过后一个。
作者: 梁志斌    时间: 2016-1-23 00:11
6楼正解
作者: 姚成晖    时间: 2016-1-23 00:28
本帖最后由 我是坏人, 于 2016-1-23 00:30 编辑

想用普通for循环删除元素   正着遍历需要在删除后索引 --
                                       倒着遍历就没有这个问题了
一般list集合做增删元素的操作 首选用列表迭代器 啥问题没有,也避免自己忘记索引还需要 --

作者: 愿随风丶飘雪    时间: 2016-1-23 00:41
list集合中元素的位置是移动的,前边有空位置就会自己移动过去,所以i--
作者: 苗超维    时间: 2016-1-23 17:48
只删掉了  第一个“java ”和第二个 “java”
作者: fury1994    时间: 2016-1-25 10:54
看看~~~~~~~~~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2