相关疑难解决方法(0)

用Java克隆迭代器

我在Java中有一个LinkedList,一个浏览列表的迭代器,我想克隆迭代器,根据原始迭代器的位置对列表进行一些临时的"向前看"处理.

我知道在任何情况下都不可能克隆迭代器,但有没有办法将迭代器克隆到LinkedList(或保存并恢复其状态)?

java iterator list

11
推荐指数
1
解决办法
5647
查看次数

如何在Java中复制迭代器?

我们有一个元素列表,并且有一个非常简单的碰撞检测,我们检查每个对象与其他所有对象.

检查是可交换的,所以为了避免重复两次,我们将在C++中执行此操作:

for (list<Object>::iterator it0 = list.begin(); it0 != list.end(); ++it0)
{
    for (list<Object>::iterator it1 = it0; it1 != list.end(); ++it1)
    {
        Test(*it0, *it1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的关键是副本

it1 = it0
Run Code Online (Sandbox Code Playgroud)

你会怎么用Java写这个?

java iterator copy

10
推荐指数
2
解决办法
1万
查看次数

迭代集合中的两个不同元素?

我想获取集合中每两个不同元素的对。我认为如果使用for-each循环,则必须以O(n ^ 2)的复杂度进行迭代。如果使用迭代器,则可以有两个迭代器,其中第二个指向第一个迭代器,这意味着对于第二个循环,我不必从头开始循环。但是,我似乎无法正确打印我的方法。

public static void main(String[] args){
    Set<String> s = new HashSet<String>();
    s.add("A");
    s.add("B");
    s.add("C");
    s.add("D");
    Iterator<String> itr1 = s.iterator();
    while (itr1.hasNext()){
        Iterator<String> itr2 = itr1;
        String s1 = itr1.next();
        while (itr2.hasNext()){
            String s2 = itr2.next();
            System.out.println(s1 + " " + s2);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是

A B
A C
A D
Run Code Online (Sandbox Code Playgroud)

但是我想要的是:

A B
A C
A D
B C
B D
C D
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
82
查看次数

标签 统计

java ×3

iterator ×2

copy ×1

list ×1