使用像c ++迭代器这样的java迭代器

时间:2013-09-28 18:23:16

标签: java iterator

    Vector <String> songList;
    Iterator<String> begin= songList.iterator();
    Iterator<String> end= songList.iterator();

假设我有一个歌曲矢量列表,就像itunes中的列表一样。如何在不迭代整个列表的情况下将begin迭代器设置为开头迭代器和结束迭代器?另外,如果我达到某个标准,我将如何反向移动末端迭代器?我能在网上找到的最好的是hasnext / next函数,但那些只是前进的?我是java新手并尝试搜索答案,但我不知道要搜索哪些关键术语。本质上我想要做的是通过保持指向以模式开头的歌曲的开头和结尾的指针,将歌曲列表从一千缩小到几个。因此,如果我正在搜索“the”,我想为所有以“the”开头的歌曲返回下限迭代器和上界迭代器。然后我想继续调整这些迭代器,因为用户从键入“the”到“ther”到“there”等等。我知道java不使用像c ++一样的指针。我只是想以最快的方式做我说的话。请帮忙!

2 个答案:

答案 0 :(得分:3)

根据您想要做的描述,您根本不想使用列表:您想要的是TreeSet。您可以使用subSet(from,to)方法搜索以模式开头的歌曲。

无论哪种方式,给定一个列表,您都可以获得一个指向列表最后一项的迭代器:

ListIterator<String> end= songList.iterator(songList.size()-1);

请注意,它指向最后一项,到过去的一个项目。您可以使用ListIterator interface中定义的previous()hasPrevious()方法向后迭代。

此外,您应该使用ArrayList类而不是Vector。正如您可以在Vector的文档中看到的那样,

  

与新的集合实现不同,Vector是同步的。如果不需要线程安全实现,建议使用ArrayList代替Vector。

答案 1 :(得分:0)

迭代器对象用于向前方向迭代,仅用于一次。虽然Listiterator obj用于迭代前向和后向,但我们可以多次迭代对象。