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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 隋丙跃 于 2012-5-3 00:54 编辑

public static void method_1()
{
        Collection s = new HashSet();
        s.add("zhangsan");
        s.add("mike");
        s.add("lili");
        Iterator it = s.iterator();
        while()
        {
                String str = (String)it.next();
                System.out.println(str);
                if(s.equals(lili))
                {
                        s.remove(str);//异常
//                        s.remove("lili");//正常
                }
        }
}


迭代器问题,我直接删除str就发生异常,但是删除丽丽 lili就可以啊 木事的!迭代的时候到底能不能操作集合元素呢?


while 忘了打了(it.hasNext())

2 个回复

倒序浏览
在迭代时,只能使用迭代器中的方法操作集合中的元素,不可以通过该集合对象的方法操作,
Iterator中,只能对元素进行判断,取出和删除操作,如果要对元素进行修改,就需要其子接
口,ListIterator来完成。
回复 使用道具 举报
public static void method_1()
{
        Collection s = new HashSet();
        s.add("zhangsan");
        s.add("mike");
        s.add("lili");
        Iterator it = s.iterator();
        while()
        {
                String str = (String)it.next();
                System.out.println(str);
                                //你那集合去和一个字符串对象比地址值,你是怎么认为的...
                                //这个条件会永远的成立,即if永远会运行,你在一个while循环中操作的
                                //一个元素还没结束,你就想删除他,你说迭代器纠结不....
                                //Iterator接口有三个方法,next() hasNext() remove(),肯定有删除
              
  if(s.equals(lili))
                {
                        s.remove(str);//异常
//                        s.remove("lili");//正常
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马