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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 墓____夜 中级黑马   /  2014-5-27 16:51  /  1838 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我只是想遍历这个集合,但是不行。

UC_Photo_001.jpg (15.21 KB, 下载次数: 44)

UC_Photo_001.jpg

11 个回复

倒序浏览
iterator的remove方法移除的是当前元素,而你前面确没有调用hasNext和next方法。遍历集合两种方法:一种是for或加强for,另一种是iterator,关键问题是LZ把两者合起来用了。
回复 使用道具 举报
LZ很有想法,两个一起用,两个混着用。这个是报错的报的是IllegalStateException
也就是你在一个不适当的时间,操作了一个方法!!
可以举例:你用狗的获取食物的方法,让猫去吃,这个一点都联系不上嘛!!
以下是改正后的代码:
用普通for来删除"b"
  1. public class A {
  2.         public static void main(String[] args) {
  3.                 ArrayList list = new ArrayList();
  4.                 list.add("a");
  5.                 list.add("b");
  6.                 list.add("c");
  7.                
  8.                
  9.                 for(int i=0;i<list.size();i++){
  10.                         String s = (String)list.get(i);
  11.                         if(s.equals("b")){
  12.                                 System.out.println(list.remove(i));
  13.                         }
  14.                 }
  15.         }
复制代码

用Iterator方法来删除"b"
  1. public class A {
  2.         public static void main(String[] args) {
  3.                 ArrayList list = new ArrayList();
  4.                 list.add("a");
  5.                 list.add("b");
  6.                 list.add("c");
  7.                
  8.                
  9.                 for(Iterator iterator = list.iterator();iterator.hasNext();){
  10.                         String s = (String)iterator.next();
  11.                         if(s.equals("b")){
  12.                                 iterator.remove();
  13.                         }
  14.                 }
  15.                 System.out.println(list);
  16.         }
  17. }
复制代码

希望对你有些帮助!!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你Iterator的hasNext()和next()方法没有 怎么遍历List
回复 使用道具 举报
其实很好理解错误的原因,你的代码在遍历的时候,都知道使用list.get(i)来确定当前遍历到的元素。而后面删除的时候iterator.remove()也应该理解需要确定是某个元素。而iterator默认是指向第一个元素前一位,只有在调用next或其他方法的时候,才会把iterator指针指向下一位元素。所以直接使用iterator.remove()肯定错误。
如下代码,你可以看看:(一定要注意其实iterator在执行操作的时候也是有指针指向不同的元素,类似索引)
public static void main(String[] args) {
               
        ArrayList arr = new ArrayList();
        arr.add("a");
        arr.add("b");
        arr.add("c");
        Iterator iterator = arr.iterator();
        iterator.next();//添加这一步,你就可以看到指针已经指向第一个了即a,把下面判断条件改成a,看效果
       
        for(int i=0;i<arr.size();i++){
                String s = (String)arr.get(i);
                if(s.equals("a")){
                        iterator.remove();//这里指针是正常的不会报错,且把“a”换成别的字母,删除的时候还是是删除a,自己可以验证
                }
        }
        System.out.println(arr.size());
        for(int i=0;i<arr.size();i++){
                System.out.print(arr.get(i));
        }
       
        }

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我也不明白 看了 这么多,到学了不少知识了。
回复 使用道具 举报
谢谢,大家 。 我明白了。
回复 使用道具 举报
hasNext()  ???呵呵  看看有木有了 然后再遍历吗
回复 使用道具 举报
迭代器与for冲突了
回复 使用道具 举报
没有hasNext()
回复 使用道具 举报
                for(Iterator it=test.al.iterator();it.hasNext();)
                {
                        Object o=(Object) it.next();
                        if(!test.newAl.contains(o))
                        {
                                test.newAl.add(o);
                                System.out.println(o.toString());
                        }
                }

迭代器的写法
回复 使用道具 举报
看看大神们的解答,,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马