【问题标题】:using java iterators like c++ iterators使用 java 迭代器,如 c++ 迭代器
【发布时间】:2013-09-28 18:23:15
【问题描述】:
    Vector <String> songList;
    Iterator<String> begin= songList.iterator();
    Iterator<String> end= songList.iterator();

假设我有一个矢量歌曲列表,就像 iTunes 中的列表一样。如何在不遍历整个列表的情况下将开始迭代器设置为开头并将结束迭代器设置为结尾?此外,我将如何将结束迭代器反向移动,直到满足特定条件?我能在网上找到的最好的是 hasext/next 功能,但那些只是转发?我是 Java 新手,并尝试搜索答案,但我不知道要搜索哪些关键术语。本质上,我要做的是通过保持指向以模式开头的歌曲的开头和结尾的指针,将歌曲列表从一千首缩小到几首。因此,如果我正在搜索“the”,我想为所有以“the”开头的歌曲返回一个下限迭代器和上限迭代器。然后我想继续调整这些迭代器,因为用户从输入“the”到“ther”再到“there”......等等。我知道java不使用像c++那样的指针。我只是想以最快的方式做我所说的。请帮忙!

【问题讨论】:

    标签: java iterator


    【解决方案1】:

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

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

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

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

    此外,您应该使用ArrayList 类而不是Vector。正如您在 Vector 的文档中所读到的,

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

    【讨论】:

    • 谢谢!我可能会使用 ListIterator,因为我需要为我的 jtable 保留向量
    【解决方案2】:

    Iterator 对象用于前向迭代,并且仅用于一次。而 Listiterator obj 用于向前和向后迭代,我们可以多次迭代对象。

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多