gpt4 book ai didi

java - HashSet 的随机起始索引迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:50:54 24 4
gpt4 key购买 nike

我将 HashSet 用于 add();消除();清除(); iterator(); 方法。到目前为止,一切都像一个魅力。但是,现在我需要满足不同的要求。

我希望能够从某个索引开始迭代。例如,我希望以下两个程序具有相同的输出。

方案一

Iterator it=map.iterator();
for(int i=0;i<100;i++)
{
it.next();
}
while (it.hasNext())
{
doSomethingWith(it.next());
}

方案二

Iterator it=map.iterator(100);
while (it.hasNext())
{
doSomethingWith(it.next());
}

我不想使用程序 1 的原因是它会产生不必要的开销。根据我的研究,我无法找到一种实用的方法来创建具有起始索引的迭代器。

那么,我的问题是,什么是实现我的目标同时最大限度地减少开销的好方法?

谢谢。

最佳答案

add() 是有原因的, remove() , 在 HashSet 中很快.您正在交易将集合中的元素视为速度和内存成本的随机访问列表的能力。

除非您先将 Set 转换为 List,否则恐怕您无法真正做到这一点。这很容易做到,但它通常涉及对 Set 中所有元素的完整处理。如果您希望能够从某个地方多次启动迭代器以形成相同的状态,这可能是有意义的。如果不是,那么您当前的方法可能会更好。

现在是代码(假设 Set<Integer> set = new HashSet<Integer>(); 是您声明的数据结构:

List<Integer> list = new ArrayList<Integer>(set);
list.subList(100, list.size()).iterator(); // this will get your iterator.

关于java - HashSet 的随机起始索引迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com