我有一堆物体漂浮在周围,我们称之为命令。正在处理。但是我的(测试)系统的规则是,为了验证结果,我需要按顺序(按订单ID)顺序输出。
这意味着已经标记为准备完成(已完成处理)的订单不能被标记为已完成,除非所有订单ID <1的订单都已完成。比它的id已经完成了。
订单ID是唯一的,并按初始订单创建顺序分配
班级订单{ int id; boolean finishedProcessing = false; boolean completed = false; }
有人可以建议有效解决这个问题吗?我只能想到创建一个HashMap(订单ID,已完成)并在每个订单完成时标记在地图中完成的订单,并确定是否允许订单完成然后循环整个地图以查看是否已标记所有先前订单完成。
这是错误的最后一部分,似乎非常低效。有没有更好的办法?
答案 0 :(得分:2)
如果按创建顺序分配了ID,则在创建时将订单添加到Deque
。然后,Deque
将按ID隐式排序。
每当订单标记为完成时,请检查Deque中的第一个条目。如果已完成,请将其从Deque
中删除(或将其移至另一个)。然后再次检查Deque中的下一个(现在是第一个)条目,以防多个订单准备就绪,并根据需要重复。
不完整订单Deque
的维护与您按ID查找订单所需的Map
无关。