问题:有没有人知道具有以下特征的Java实现(我现在开发自己的时间/知识太少)?
简明(过度简化)的用例版本是:
TimeClass
TimeClass
TimeClass
TimeClass
在活动开始时为集合* 添加活动的开始时间(快速添加)TimeClass
在活动结束时从集合* 中删除活动的开始时间(快速随机访问移除)TimeClass
能够报告最低尚未完成的开始时间(快速最低值) * 将集合视为:Collection<Time> implements Comparable<Time>
因为我不确定我的系统(TimeClass
生活的系统)的运行时行为是什么,所以我使用这些集合快速对以下场景进行基准测试:{{1 (番石榴),TreeMultiSet
(番石榴),MinMaxPriorityQueue
。
注意,根据所使用的集合, min value 以不同方式实现(请记住元素按递增顺序添加):ArrayList
,TreeMultiSet.firstEntry().getElement()
,{{1 }}。
增加1,000,000:
MinMaxPriorityQueue.peekFirst()
: 00:00.897(m:s.ms) ArrayList.get(0)
: 00:00.068(m:s.ms) TreeMultiSet
: 00:00.658(m:s.ms) ADD 1,REMOVE 1,REPEAT 1,000,000次:
List
: 00:00.673(m:s.ms) MinMaxPriorityQueue
: 00:00.416(m:s.ms) TreeMultiSet
: 00:00.469(m:s.ms) 按顺序添加10,000个顺序,按顺序删除所有顺序:
List
: 00:00.068(m:s.ms) MinMaxPriorityQueue
: 00:00.031(m:s.ms) TreeMultiSet
: 00:00.048(m:s.ms) 按顺序添加10,000个顺序,以随机顺序删除所有内容:
List
: 00:00.046(m:s.ms) MinMaxPriorityQueue
: 00:00.352(m:s.ms) TreeMultiSet
: 00:00.888(m:s.ms) 当前的想法:
我倾向于使用List
,因为它具有最稳定的性能,并且似乎最优雅地降级。 我会更喜欢建议
由于
- 编辑 -
的示例伪代码按顺序添加所有顺序,删除所有随机顺序:
MinMaxPriorityQueue
答案 0 :(得分:1)
你最好的选择是树图:
http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html
O(log n)几乎适用于所有操作..您可以将密钥重新排序。
还有来自Google(番石榴)的MinMaxPriorityQueue
删除是O(n),但所有其他操作都是O(log n)