【发布时间】:2014-03-04 13:54:14
【问题描述】:
我需要一个支持O(1)中以下操作的数据结构:
- myList.添加(项目)
- myList.remove(Item.ID) ==> 它实际上需要随机访问
-
myList.getRandomElement()(等概率)
--(请注意,getRandomElement() 并不是随机访问的意思,它只是表示:“给我一个随机的物品,以相同的概率”)
请注意,我的项目是独一无二的,所以我不在乎使用的是 List 还是 Set。 我检查了一些 java 数据结构,但似乎没有一个是解决方案:
- HashSet 支持 O(1) 中的 1,2,但它不能给我 O(1) 中的随机元素。我需要调用 mySet.iterator().next() 来选择一个随机元素,这需要 O(n)。
- ArrayList 在 O(1) 中执行 1,3,但它需要进行线性搜索才能找到我要删除的元素,尽管它需要 O(n)
有什么建议吗?请告诉我应该调用哪些函数?
如果java没有这样的数据结构,我应该使用哪种算法来达到这样的目的?
【问题讨论】:
标签: java performance algorithm data-structures hashset