java - 像使用 C++ 迭代器一样使用 java 迭代器

标签 java iterator

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

假设我有一个歌曲 vector 列表,就像 itunes 中的列表一样。如何将开始迭代器设置为开头,将结束迭代器设置为结尾而不迭代整个列表?另外,在满足特定条件之前,我将如何沿相反方向移动结束迭代器?我在网上能找到的最好的方法是 hasnext/next 函数,但这些函数只是向前的?我是java新手,尝试寻找答案,但我不知道要搜索哪些关键术语。本质上,我想做的就是通过保留指向以模式开头的歌曲的开头和结尾的指针,将歌曲列表从一千首缩小到几首。因此,如果我正在搜索“the”,我想返回所有以“the”开头的歌曲的下限迭代器和上限迭代器。然后我想随着用户从输入“the”到“ther”再到“there”...等不断调整这些迭代器。我知道java不像c++那样使用指针。我只是想以最快的方式做到我所说的。请帮忙!

最佳答案

从您想要执行的操作的描述来看,您根本不想使用列表:您想要的是 TreeSet 。您可以使用 subSet(from,to) 方法来搜索以模式开头的歌曲。

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

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

请注意,它指向最后一项,而不是指向最后一项之后的一项。您可以使用 ListIterator interface 中定义的 previous()hasPrevious() 方法向后迭代。 .

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

Unlike the new collection implementations, Vector is synchronized. If a thread-safe implementation is not needed, it is recommended to use ArrayList in place of Vector.

关于java - 像使用 C++ 迭代器一样使用 java 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070248/

相关文章:

java - 在 OpenGL 中使用 GL_QUADS 渲染时,形状的一部分丢失

java - 迭代器如何绑定(bind)到集合接口(interface)

java - 如何从数组列表中返回最近加入的成员?

C++:遍历字符串 - 迭代器?

c++ - std::list 迭代器没有被分配

java - 在 Android 中使用 HttpPost 获取文件上传进度

java - 将文件列表读取为 Java 8 流

java - Comparator/Comparable/ComparatorChain问题

java - 比较文件中的行

c++ - std::contiguous_iterator 有什么用?