0

目前还没有寻找任何代码帮助,只是一些建议。

我正在设计一个调度程序,它接受文本文件输入并为所有团队安排每周比赛。我有这个工作,现在我正在考虑扩展它以保持结果。此刻,我将所有团队读入一个列表。并使用 Collections.rotate 旋转列表以随机化灯具。

我正在考虑使用地图来保持团队和获胜次数,但是轮换似乎不适用于地图。是否有我遗漏的类似功能,或者我忽略了某些功能?

4

3 回答 3

3

您不想旋转 Map 本身,但听起来您想要做的是旋转 Map 的keys的视图。

所以在伪代码中,你可以做类似的事情

//make a copy of the keys of the map
List keys = new ArrayList(yourmap.keys())
Collections.rotate(keys)
//iterate over the keys of the map in the new rotated order
for key in keys:
    Object value = yourmap.get(key)
    // do something with this value
于 2013-07-11T14:33:33.317 回答
2

MapJDK 中有 3 个主要的、非专门的接口实现:

  • HashMap没有订购 - 这对您没有帮助
  • TreeMap根据一些比较器排序 - 可能不容易适应您的用例
  • LinkedHashMap按插入顺序或访问顺序排序

在您的情况下,您可以使用LinkedHashMap使用访问顺序(您使用参数设置为的特殊构造accessOrdertrue器创建一个),并且每次访问其中一个项目时,它都会自动重新排序到地图的尾部。一个完整的迭代周期将保持顺序不变。

于 2013-07-11T14:31:35.677 回答
2

Rotate 可能适用于 LinkedHashMap,这是将地图旋转一个元素的方法

Iterator<Entry> i = m.entrySet().iterator();
Entry e = i.next();
i.remove();
m.put(e.getKey(), e.getValue());
于 2013-07-11T14:42:55.553 回答