类似Collections.rotate的地图

时间:2013-07-11 14:24:12

标签: java list map

尚未寻找任何代码帮助,只是一些建议。

我正在设计一个调度程序,它接受一个文本文件输入并为所有团队安排每周游戏。我有这个工作,现在我正在寻求扩大它以保持结果。目前,我将所有团队都列入了一个清单。并使用Collections.rotate旋转列表以随机化灯具。

我正在考虑使用地图来保持团队和胜利数量,但旋转似乎不适用于地图。是否有类似的功能,我缺少,或者我忽略了什么?

3 个答案:

答案 0 :(得分:3)

您不希望旋转地图本身,但听起来您想要做的是旋转地图的的视图。

因此,在伪代码中,您可以执行类似

的操作
//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

答案 1 :(得分:2)

JDK中有Map接口的3个主要的非专用实现:

  • HashMap未订购 - 这对您没有帮助
  • 基于某个比较器订购的
  • TreeMap - 可能不容易适应您的用例
  • LinkedHashMap按照广告订单或访问顺序排序

在您的情况下,您可以使用LinkedHashMap使用访问顺序(使用a special construtor with the parameter accessOrder set to true创建一个访问顺序),每次访问其中一个项目时,它都会自动重新排序到地图的尾部。完整的迭代周期将保持订单不变。

答案 2 :(得分:2)

旋转可能适用于LinkedHashMap,这是如何通过一个元素旋转地图

Iterator<Entry> i = m.entrySet().iterator();
Entry e = i.next();
i.remove();
m.put(e.getKey(), e.getValue());