【问题标题】:A java datastructure which has constant access time and allows duplicates具有恒定访问时间并允许重复的 java 数据结构
【发布时间】:2015-05-25 02:06:37
【问题描述】:

HashMap 具有恒定的访问时间,但不允许重复。 ArrayList 允许重复但没有固定的访问时间。

java中是否存在允许恒定访问时间并允许重复的数据结构?

我知道我可以创建自己的HashMap,它允许重复,但我想使用已经存在的数据结构。

提前谢谢你。

【问题讨论】:

  • 一个HashMap<Key,List<Value>>?
  • 您需要地图还是收藏?
  • 你需要删除O(1)吗?
  • 是的。它应该具有 Hashmap 的所有功能,并且应该允许重复。

标签: java hashmap duplicates constant-time


【解决方案1】:

ArrayList#getArrayList#set 实际上是常数时间,还有一些其他函数。阅读documentation,类文档的第二段:

size、isEmpty、get、set、iterator 和 listIterator 操作在恒定时间内运行

您的下一个选择是多图。这是一个以键/集合方式存储项目的映射。集合保存值,因此单个键映射到多个值。您可以查看 Apache Common 的 MultiMap 以查看他们是否有适合您的实现。或者您可以随时创建自己的,只需将集合定义为值:

Map<String, List<String>> multimap;

【讨论】:

  • 对 ArrayList 的包含查询需要时间。这是我试图满足的一个用例。
【解决方案2】:

您可以使用来自Eclipse CollectionsBag、来自Google GuavaMultiset 或来自Apache Commons CollectionsBagBag 基本上是 Map&lt;Key, Integer&gt;,其行为类似于集合。

这三个库也都有 Multimap。 Multimap 基本上是 Map&lt;Key, Collection&lt;V&gt;&gt;,其中调用 put 导致添加到 Collection&lt;V&gt; 而不是替换该键处的值。 Multimap 有不同的类型(ListSetBag 等)。

注意:我是 Eclipse Collections 的提交者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多