整数集。在增加新条目的情况下可能会提高性能

Set of integers. Possible performance gain in case of increasing new entries

如果你是一个高技能的低延迟 Java 开发人员(我不是)并且你被告知要实现一组 int(原始的或非原始的),你是否有可能得到一个在保证每个新条目都高于集合中先前存储的任何其他值的前提下,获得额外的性能提升?

addcontainsremove 操作在 best/worst 案例场景中的收益有多大?

一方面,这种限制会带来更好的性能似乎很自然。另一方面,非递减条目是一种非常常见的情况(例如在生成唯一 ID 时),如果收益值得为之奋斗,那么或多或少已知的实现就会已经开发出来。

当你检查这个 question 时,你会发现 addcontains 已经是 O(1)。所以那里没有太多可以改进的地方。

而且我认为这两个将是唯一一次可以从这个限制中受益的人:

  • "adding" 变得更容易,因为您可以简单地记住最后添加的值;所以当一个新值进来时只需要检查一次
  • 同样,当请求"contained"时;你有一个第一个 pre-check 可以立即告诉你什么时候给定的值可以 在集合

但仅此而已。

除此之外:当您的 constraint 实际上是要添加的每个 "new" 条目都大于最后一个条目时 - 那么您不需要首先需要一个 Set。因为您的 constraint 保证所有项目都是唯一的。所以从这个意义上说,您也可以查看列表 ...

关于问题在 O(1) 和 O(1.5) 之间的可能增量之间提出的评论;我的回复:

O(1) 和 O(n) 之间的区别是理论性质的,你用笔和纸来回答。 O(1.0) 和 O(1.005) 之间的区别......我将从 experiments 和 benchmarks.

开始

含义:这些"real"因素取决于"close"底层实现的各种元素。您将首先研究如何为 您的 平台实现您当前使用的 Set; 您的 平台上的 JVM 如何运行 just-in-time-compiling。从那里开始,您可以得出关于可以通过考虑此约束来改进的事情的结论。

终于;关于约束 降低 现有实施。我想这也可能发生;如上所述:这些细节确实取决于具体实施。除此之外:您命名了三种不同的操作;实际结果可能大不相同;取决于操作类型。

如果我必须解决这个问题;我将从使用 "test data"(随机数、increasing-only 数字;及其变体)创建相当大的文件开始。然后我会使用 real 分析器(或者至少是复杂的 benchmarking)并开始测量。