【发布时间】:2011-10-13 17:45:45
【问题描述】:
在一个游戏中,我有一个玩家列表,可以这样说:
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>呢?使用该数据结构的位置算法将是微不足道的。 -
这不会导致玩家 A 与 A 配对吗?
-
@Kirk:是的,ArrayList 可以,但由于我可能需要在列表中间插入和删除玩家,我想要一个 LinkedList。
-
@matt b:是的。谢谢你。固定(我希望)。 (当我无法测试我的代码时会发生这种情况。它总是错!)
-
@Thomas,只是通常情况下,重新洗牌比使用
LinkedList更快,因为实例化列表元素条目的成本通常比简单地移动内存要高。跨度>