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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金肖 中级黑马   /  2012-5-2 11:20  /  2025 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.ListIterator;
public class ListDemo {
        public static void main(String[] args) {
                ArrayList<String> al = new ArrayList<String>();
                al.add("abc01");
                al.add("abc02");
                al.add("abc03");
                al.add("abc04");
                //在迭代过程中天加元素
                ListIterator<String> li = al.listIterator();
                while(li.hasNext())
                {
                        String s = li.next();
                        if(s.equals("abc02"));
                        {
                                li.add("java");  //此处不是判断s是否和“acb02”的地址相同,如果相同就在“abc02”后面添加“java”
                        }
                }
                System.out.println(al);
        }
}
//可是打印即如果为什么是:[abc01, java, abc02, java, abc03, java, abc04, java]
//而不是:[abc01, abc02,java, abc03, abc04]它呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
这个这个……我表示很悲剧!
这这里的原因就是因为:
  1. if(s.equals("abc02"));
复制代码
这一句代码中的后面的一个分号导致的!
这一个分号代表这句语言执行结束,那么就就说这个判断也就结束了。
那么后面的逻辑就不存在了。这就导致了,不管是不是一样,也会去增加。
还有就是equals比较的不是地址哦!这里比较的就是表面的值呢!
要比较地址则要:
  1. if(s == abc02"){
  2.     li.add("java");      
  3.                  }
复制代码
谢谢!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 贾联国 于 2012-5-2 11:51 编辑

add(E e)方法是将指定的元素添加到此列表的尾部,程序会执行无论if是否符合条件,执行一次add
回复 使用道具 举报
噢。 我也太不小心了。。。
回复 使用道具 举报
OK,学习了,ArrayList用Iterator迭代的时候不允许修改数据,而用ListIterator迭代时可以!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马