什么是java数据结构是一个有序集合,提供HashSet函数的恒定时间方法contains
,并提供按索引进行恒定时间查找,就像ArrayList的get
方法一样? Java API是否包含这样的东西?我考虑过使用TreeSet,但根据Java Docs,这些操作是O(log n)。Java有序哈希集合
回答
使用LinkedHashSet。它是Set接口的哈希表和链表实现,具有可预测的迭代顺序。
你会看到最多O(n)的复杂插入或检查的哈希集合项目的存在。但是大多数时候你没有看到碰撞,所以在大多数情况下,它会是O(1)。
LinkedHashSet是否支持索引? – Aroto
设置界面没有任何直接的方法,如indexOf()或get()。您需要解析整个集合才能搜索元素。 indexOf()和get()在内部只做同样的事情。 – FallAndLearn
OP通过索引*请求恒定时间元素检索*。虽然'LinkedHashSet'提供了恒定时间检索,但它只能通过键而不是索引。 –
Java标准库不提供这样的类,但你可以没有太多的麻烦实现自己的。这将是或多或少的双重LinkedHashSet
:一个List
(也许包装ArrayList
)维持恒定时处理的内部HashSet
。
集合API有为了使自己容易实现 集合类课程;在这种情况下,我会考虑实现AbstractList
的具体子类。
更新: 在另一方面,如果你的想法是,情况自动保持它们的元素有序,和/或他们不允许重复的元素,那么你所谈论的不是List
在所有。在这种情况下,你会想要考虑实现一个AbstractSet
的具体子类,它增加了索引检索方法。你仍然可以包装一个HashSet
和一个ArrayList
,但是你需要花费一些努力来保持元素插入时的列表顺序。
- 1. 排序的哈希集合
- 2. 在Java中锁定哈希集合
- 3. Java哈希集和树集
- 4. 哈希映射,哈希集合,哈希字典之间有什么区别?
- 5. 哈希无序集?
- 6. CakePHP 2.1哈希与集合
- 7. 迭代哈希集合
- 8. 指向哈希集java
- 9. SAS哈希合并 - 小数据集作为哈希对象
- 10. 哈希图排序java
- 11. 将Java哈希码组合成“主”哈希码
- 12. 结合哈希
- 13. 哈希码和哈希集的概念
- 14. 在JavaScript中设置哈希集合?
- 15. Java哈希集包含重复项
- 16. Java哈希集删除重复
- 17. Java中的哈希集问题
- 18. Java中的哈希数组哈希
- 19. Java MD5哈希不匹配.NET哈希
- 20. Java无法找到符号 - 方法哈希集合
- 21. Java中的树和哈希(集合图)之间的差异
- 22. 比较2个Java哈希集合中的键值
- 23. Ruby集合哈希集合中的选择性值
- 24. 合并哈希键
- 25. redis中的哈希或排序集?
- 26. Perl按哈希值排序哈希
- 27. 嵌套哈希排序哈希键
- 28. 排序哈希
- 29. 排序哈希
- 30. java中哈希json
A ['LinekdHashSet'](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html)也许? – Mureinik
你需要恒定时间插入吗?如果是这样,这是行不通的,因为像这样的数据结构可以让你在O(n)时间进行比较排序。 – user2357112
当您说“已订购”时,是指排序顺序,还是指其他订单,如广告订单? – user2357112