我需要一个
的数据结构a, b and c
添加到空结构中,使它们位于0, 1 and 2
)位置。a, b, c, a, b
。delete(1)
之类的操作,它将删除结构中1
的所有发生次数)。如果我有元素a, b, c, d, c, e
并删除元素c
,我应该a, b, d, e
。我无法真正选择这里最好的数据结构。我一开始就想过像List这样的东西(问题是在移除项目时有O(n)
操作),但也许我错过了什么?树/堆怎么样?哈希表/映射?
我将不得不假设我将添加与删除此数据结构一样多的内容。
由于
答案 0 :(得分:2)
我认为您可能需要编写专用数据结构(取决于您的效率要求)。
类似于双向链表,其中包含额外的nextEqualItemPtr,以及指向每个项的第一个的HashMap。
然后你可以快速找到要删除的第一个“b”并跟随所有nextEqualItemPtrs将它们全部删除(双链接以便保持列表完整)。 开销确实使地图保持最新状态。新项的nextEqualItemPtr列表只能指向map.put(key)返回的节点.nextEqualItemPtr
我肯定会首先使用一些简单的东西,只有当它太慢时才会插入这种东西。
答案 1 :(得分:1)
Apache Collections (homepage)的Bag
界面应符合您的要求。它有许多实现,所以也许跟踪插入顺序(你的第一点)。
它有:
removeAll
remove(count)
与使用普通LinkedList
或ArrayList
相比,它也相当快,但我不确定是否插入了元素索引。
被描述为
包含每个对象的多个副本的集合的包接口