需要帮助单步执行java迭代器

时间:2011-02-12 03:08:20

标签: java iterator

假设我已经创建了一个名为“iter”的迭代器和一个名为“database”的arraylist。我希望能够查看arraylist并查看arraylist中的任何元素是否等于名为“test”的String。如果是,那么我想将该元素添加到另一个列表中。

while(iter.hasNext()) {
    if(database.next() == test) { 
        database.next().add(another_list);
    }
}

我做错了什么?我对java中的迭代器完全不熟悉。我需要编写自己的迭代器类吗?任何代码示例将不胜感激。感谢

2 个答案:

答案 0 :(得分:2)

if(database.contains("test"))
{
   another_list.add("test");
}
  1. 您可以使用内置方法contains(...)
  2. 您应该使用equals(...)进行数据比较
  3. 查看javadoc以查看是否已存在符合您目的的方法

答案 1 :(得分:2)

代码的问题在于,每次调用.next()时,它都会将迭代器前进到下一个位置。这意味着这段代码

if(database.next() == test) { 
    database.next().add(another_list);
}

无法按预期工作,因为对database.next()的第一次调用不会返回与第二次调用database.next()相同的值。要解决此问题,您需要创建一个临时变量来保留新值,如下所示:

while(iter.hasNext()) {
    /* type */ curr = iter.next();
    if(curr == test) { 
        curr.add(another_list);
    }
}

(填写代替/* type */的迭代内容的实际类型)

但是,在许多情况下,您不需要显式使用迭代器。大多数Collections类型实现Iterable接口,在这种情况下你可以写

/* container */ c;
for(/* type */ curr: c) {
    if(curr == test) { 
        curr.add(another_list);
    }
}

希望这有帮助!