A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© davy0119 中级黑马   /  2016-1-22 20:12  /  942 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

11 个回复

倒序浏览
顶第三方发发发发
回复 使用道具 举报
在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加,碰到连续一样的元素的话会跳过后一个。
回复 使用道具 举报
没人知道吗
回复 使用道具 举报
ConsciousStream 发表于 2016-1-22 22:10
在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加 ...

谢谢,
回复 使用道具 举报
三楼说得对
回复 使用道具 举报
说的对。在 list.remove(i);后面加  i--;  就OK了
因为remove过后list的size会减1,元素位置相应的会前移
如果不加,碰到连续一样的元素的话会跳过后一个。
回复 使用道具 举报
6楼正解
回复 使用道具 举报
本帖最后由 我是坏人, 于 2016-1-23 00:30 编辑

想用普通for循环删除元素   正着遍历需要在删除后索引 --
                                       倒着遍历就没有这个问题了
一般list集合做增删元素的操作 首选用列表迭代器 啥问题没有,也避免自己忘记索引还需要 --
回复 使用道具 举报
list集合中元素的位置是移动的,前边有空位置就会自己移动过去,所以i--
回复 使用道具 举报
只删掉了  第一个“java ”和第二个 “java”
回复 使用道具 举报
看看~~~~~~~~~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马