是否有一个Java数据结构实际上是一个具有双指标和内置插值的ArrayList?

Bob*_*oss 6 java interpolation data-structures

我正在寻找具有以下特征的预构建Java数据结构:

  1. 它看起来应该像ArrayList,但应该允许通过双精度而不是整数进行索引.请注意,这意味着您可能会看到与原始数据点不对齐的标记(即,要求与键"1.5"对应的值). 编辑:为清楚起见,根据评论,我不打算改变 ArrayList实现.我正在寻找类似的界面和开发人员体验.

  2. 因此,返回的值可能会被插值.例如,如果键为1.5,则返回的值可以是键1.0处的值的平均值和键2.0处的值.

  3. 键将被排序,但不确保值单调增加.实际上,无法保证值的一阶导数是连续的(使其不适合某些类型的样条).

  4. 请仅提供免费代码.

为清楚起见,我知道如何写这样的东西.实际上,由于某些性能和编码问题,我们已经在遗留代码中实现了这个以及一些相关的数据结构.

我想避免的是在JDK,Apache Commons或其他标准库中可能已经存在这样的事情时花费大量时间来编写我自己的解决方案.坦率地说,这正是让这个遗留代码进入现在的情况的方法....

在免费提供的图书馆里有这样的东西吗?

Joa*_*uer 4

允许double值作为索引是一个相当大的变化ArrayList

这样做的原因是,double根据定义,具有 as 索引的数组或列表几乎是稀疏数组,这意味着它对于几乎所有可能的索引没有值(或取决于您的定义:固定的已知值),并且只有有限的索引。索引的数量具有明确的值集。

Java SE 中没有预构建的类支持所有这些。

就我个人而言,我会将这样的数据结构实现为具有适当插值的元组的跳跃列表(或类似的快速搜索数据结构)(index, value)

编辑:实际上,后端存储有一个非常好的匹配(即除了插值之外的所有内容):只需使用 aNavigableMap例如 aTreeMap来存储从索引到值的映射。

这样,您可以轻松地使用ceilingEntry()和 (如果需要)higherEntry()来获取与您需要的索引最接近的值,然后从中进行插值。