- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
具体来说,我需要一个集合,它使用一个字段 A 进行访问,并使用一个不同的字段(字段 S)进行排序,但是一个接受重复的排序集合就足够了。
我经常遇到这种情况,我需要这个集合,而 TreeMap 不是一个选项,因为它不允许重复。所以现在是时候在这里问了。 stackoverflow here 上指出了几种解决方法和 here - 即有:
TreeMap<Field_S, List<Value>>
:对我来说问题是列表的内存开销和原始键的装箱谁有更好的建议?或者我应该扮演我自己的排序数据结构(哪一个?)?其他来源(Java、开源、带有单元测试和小型 deps)也会很好。
更新
目前有关我的用例的更多详细信息(尽管我上次也有类似的需求)。我有一个集合(数百万)我希望能够使用的引用文献
所以所有人都在呼唤斐波那契堆,但我担心每个元素的开销太大 -> 这就是我考虑使用内存效率更高的“排序+分段数组”解决方案的原因。
最佳答案
当你需要一个排序的集合时,你应该仔分割析你的需求。
如果大多数操作是 inserting 并且只有少数是要搜索的,那么使用排序集合,即保持集合中的元素不断地排序,这不是一个好的选择(由于在插入时保持元素排序的开销,这将是最常见的操作)。
在这种情况下,最好保留一个 unsorted 集合并仅在需要时进行排序。 IE。在搜索之前。您甚至可以使用简单的 List
并在需要时对其进行排序(使用 Collections.sort
即合并排序)。但我建议谨慎使用,因为为了高效,假设您在处理大数据。在非常小的数据中,即使是线性搜索也足够好。
如果大多数操作是搜索,那么您可以使用排序集合,从我的角度来看,有数据结构可供选择(您已经提到了一些),您可以进行基准测试以查看哪一个适合您的需要。
关于Java:允许重复的排序集合,内存效率高并提供快速插入+更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12827595/
这个问题对我来说非常具体,所以我在 Stack Overflow 上找不到相关问题。因此,我正在编写如下所示的 grep 代码。我对 stringindextoutofboundexception 感
我是一名优秀的程序员,十分优秀!