这是一个如何使用的简化示例!
包含n个元素的地图(在此示例中有三个; One
,Two
和Three
)。映射定义为<String, DecrementableInteger>
,后者是可变整数的包装器。
class DecrementableInteger
{
private int timeLeftMax;
private int timeLeft;
public DecrementableInteger (int v) {
timeLeft = v;
timeLeftMax = v;
}
public void update (int v) {
timeLeft -= v;
}
public int get () {
return timeLeft;
}
public void reset () {
timeLeft = timeLeftMax;
}
}
然后有它的用法。
class Test
{
private final Map<String, DecrementableInteger> integers = new CircleHashMap<>(); //?
private String activeKey = null;
Test () {
integers.put("One", new DecrementableInteger(4));
integers.put("Two", new DecrementableInteger(1));
integers.put("Three", new DecrementableInteger(2));
}
void update () {
if (activeKey == null) {
for (Entry<String, DecrementableInteger> e : integers.entrySet()) {
e.getValue().update (1);
if (e.getValue().get () <= 0) {
System.out.println(e.getKey() + " just finished, resetting.");
e.getValue().reset();
activeKey = e.getKey();
break;
}
}
} else {
System.out.println(activeKey + " did their thing, continuing!");
activeKey = null;
}
}
}
每秒多次调用update
方法。
第一次迭代将给出以下结果。
Two just finished, resetting.
两个=&gt; 1 迭代中断,下次继续Three
。
迭代完成,下次重新开始One
。
Two just finished, resetting.
两个=&gt; 1 迭代中断,下次继续Three
。
Three just finished, resetting.
三=&gt; 2 迭代完成,下次重新开始One
。
代码需要具备以下特性:
activeKey
activeKey
CircleList
是否有效且有效的解决方案?如果是这样,该解决方案将是什么样的。
答案 0 :(得分:1)
您是否需要使用地图,或者您可以使用列表吗?
如果需要是Map,则应使用TreeMap,因为TreeMap已定义了排序。然后你需要创建一个特殊的迭代器,它基本上遍历树,并在到达结束时返回到元素1。