在一个游戏中,我有一个玩家列表,就像这样:
LinkedList<String> players = new LinkedList<String>();
我想让每个玩家与其他所有玩家交互,所以我写了两个嵌套的循环:
Iterator<String> i1 = players.iterator();
while (i1.hasNext()) {
String p1 = i1.next();
Iterator<String> i2 = players.iterator();
// But I want to do this: Iterator<String> i2 = i1.clone();
while (i2.hasNext()) {
String p2 = i2.next();
System.out.println("Interact: " + p1 + ", " + p2);
}
}
由于我只希望每对玩家仅进行一次互动,因此我希望内部循环从外部循环的当前玩家之后的玩家开始。所以我想克隆迭代器,但是这样不会编译。
那么,我应该做些什么呢?
ArrayList<String>
呢?使用这种数据结构会使得基于位置的算法变得非常简单。 - Kirk WollLinkedList
更快,因为实例化列表元素条目的成本通常比简单地移动内存要高。 - Kirk Woll