黑马程序员技术交流社区
标题:
iterator,为什么这个运行不了?
[打印本页]
作者:
墓____夜
时间:
2014-5-27 16:51
标题:
iterator,为什么这个运行不了?
我只是想遍历这个集合,但是不行。
UC_Photo_001.jpg
(15.21 KB, 下载次数: 45)
下载附件
2014-5-27 16:51 上传
作者:
AntThinking_toT
时间:
2014-5-27 17:13
iterator的remove方法移除的是当前元素,而你前面确没有调用hasNext和next方法。遍历集合两种方法:一种是for或加强for,另一种是iterator,关键问题是LZ把两者合起来用了。
作者:
田富丰
时间:
2014-5-27 17:32
LZ很有想法,两个一起用,两个混着用。这个是报错的报的是IllegalStateException
也就是你在一个不适当的时间,操作了一个方法!!
可以举例:你用狗的获取食物的方法,让猫去吃,这个一点都联系不上嘛!!
以下是改正后的代码:
用普通for来删除"b"
public class A {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for(int i=0;i<list.size();i++){
String s = (String)list.get(i);
if(s.equals("b")){
System.out.println(list.remove(i));
}
}
}
复制代码
用Iterator方法来删除"b"
public class A {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for(Iterator iterator = list.iterator();iterator.hasNext();){
String s = (String)iterator.next();
if(s.equals("b")){
iterator.remove();
}
}
System.out.println(list);
}
}
复制代码
希望对你有些帮助!!
作者:
More
时间:
2014-5-27 19:08
你Iterator的hasNext()和next()方法没有 怎么遍历List
作者:
an1911
时间:
2014-5-27 19:24
其实很好理解错误的原因,你的代码在遍历的时候,都知道使用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));
}
}
作者:
屋檐下的期待
时间:
2014-5-27 22:53
我也不明白 看了 这么多,到学了不少知识了。
作者:
墓____夜
时间:
2014-5-28 08:34
谢谢,大家 。 我明白了。
作者:
冯云飞
时间:
2014-5-28 13:26
hasNext() ???呵呵 看看有木有了 然后再遍历吗
作者:
相濡、彼岸
时间:
2014-5-28 16:53
迭代器与for冲突了
作者:
shi980088
时间:
2014-5-28 17:29
没有hasNext()
作者:
KevinSmart
时间:
2014-5-28 20:53
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());
}
}
迭代器的写法
作者:
茂子
时间:
2014-5-29 11:47
看看大神们的解答,,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2