我在Java中有一个LinkedList,一个浏览列表的迭代器,我想克隆迭代器,根据原始迭代器的位置对列表进行一些临时的"向前看"处理.
我知道在任何情况下都不可能克隆迭代器,但有没有办法将迭代器克隆到LinkedList(或保存并恢复其状态)?
我们有一个元素列表,并且有一个非常简单的碰撞检测,我们检查每个对象与其他所有对象.
检查是可交换的,所以为了避免重复两次,我们将在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写这个?
我想获取集合中每两个不同元素的对。我认为如果使用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)