需要使用Iterator的帮助

时间:2011-02-16 02:12:07

标签: java iterator

我对迭代器完全不熟悉。我有一个名为“Test”的ArrayList,带有String对象。我将如何使用迭代器类?我已经尝试了所有我能想到的东西,它只是没有意义。谢谢你的帮助。

假设我有一个名为“iter”的迭代器。我需要单步执行我的ArrayList来搜索某个String。找到该String后,我需要将其添加到名为“test2”的其他ArrayList中。

while(iter.hasNext()) {
    if(iter.next() == sampleString) {
        test2.add(sampleString);
    }
}

唯一的问题是,当我调用next()时,它会将指针移动到下一个String,忽略ArrayList中的第一个String。我该如何实现?

5 个答案:

答案 0 :(得分:4)

你不需要一个。 ArrayList已经可以进行了! :-D

ArrayList<String> test = new ArrayList<String>();
test.add("Hello");
test.add("world");
for(String str : test) System.out.println(str);

答案 1 :(得分:4)

迭代器通常使用如下:

while (iter.hasNext()) {
    String nextString = iter.next();
    // Do something with the string...
}

有些人(包括我自己)会更喜欢增强型for循环:

for (String nextString : listOfStrings) {
    // Do something with the string
}

for循环避免了获取显式Iterator引用的需要,并且包含nextString变量声明,使其保持简洁和适当的范围。

答案 2 :(得分:2)

问题在于你对Iterator.next()的工作方式不太了解

这是直接从Java API

复制的

E next() - 返回迭代中的下一个元素。

这意味着.next()将返回一个对象,然后移动到列表中的下一个项目。

调用next()

时需要存储返回的对象
while(iter.hasNext()) 
{
    String temp = iter.next();
    //this is a more old school method but more true to form. 
    //== doesn't necessarily do equality checks on all objects the way
    //you would think 
    if(temp.equals(sampleString)) 
    {
        test2.add(temp);
    }
}

答案 3 :(得分:0)

迭代器只是了解如何遍历给定数据结构的东西。

你不理解的是什么?

对于List,迭代器将跟踪其在列表中的当前位置,并了解如何获取列表中的下一个元素。对于像列表这样的东西,它相对简单,但你也可以为一些其他任意数据结构定义一个迭代器,它不像列表那么简单。您还可以定义一个执行不同操作的操作,例如向后遍历列表。如果您对迭代器有特定的问题,请更新您的问题,我们将采取措施: - )

答案 4 :(得分:0)

迭代器是遍历项集合的一种方法。遵循该语句,java.util.Collection 扩展 Iterable(public interface Collection<E> extends Iterable<E>)。即所有集合类在某种程度中为Iterableiterator()是获取Iterator句柄的方法。获得句柄后,您可以遍历项目。

我突然强调了,因为并非所有迭代器都允许双向遍历。 ListIterator允许这样做。

我会重写您的代码,如下所示

for(String s : myCollection)
{
   if(s.equals(sampleString))
   {
      test.add(s);
   }
}