【问题标题】:An efficient Map of elements with continuous integer keys in JavaJava中具有连续整数键的元素的有效映射
【发布时间】:2019-03-21 11:46:18
【问题描述】:

在 Java 中是否有实现Map 接口并有效保存具有连续整数键的元素数组的数据结构?

在我看来,为了达到最佳效率,它相当于在Map接口中包装一个带有索引偏移值的数组或ArrayList,或者一个带有哈希函数f(key) = key - offset和最小值的哈希表支持数组。

我知道这很简单,但我不想重新发明轮子。 JDK中有这样的数据结构吗?或者有没有提供实现的库?

【问题讨论】:

  • 你能举个例子吗?“具有连续整数键的元素数组”?这样的课程会是什么样子?
  • 我不确定这个解决方案的“效率”有多高,假设哈希映射已经是 O(1)。如果您使用整数作为键,则哈希码中的开销可以忽略不计
  • 瞧:ideone.com/MTXAso(我不能保证它会正常工作)
  • @Lino, SparseArray 没有实现Map 接口
  • @ShreckYe 您可以获得的效率增益是主观的(散列函数、数据类型、项目数等)。但是,有 Map 接口的替代实现。例如,看看bitbucket.org/trove4j/trove,它尽最大努力使用原语而不是包装器。

标签: java dictionary data-structures


【解决方案1】:

如果您不需要支持更新(这会使您的问题变得更加困难),请考虑传入 IntFunction<T> 而不是 Map<Integer,T> 来指定映射

当你有Map 时,你可以传递map::get,当你没有地图时,你有很多简单的方法来指定一个映射。例如,您可以使用 lambda 定义一个简单的映射函数,例如:

IntFunction<T> mapper = v -> {
    if (v < offset || v >= offset+array.length)
        return null;
    return array[v-offset];
}

【讨论】:

    【解决方案2】:

    如果你正在寻找要排序的键,那么你可以使用java中的SortedMap接口 https://www.geeksforgeeks.org/sortedmap-java-examples/

    【讨论】:

    • SortedMap 只是一个接口。我正在寻找一个实现。当然正如你提到的,它可以实现SortedMap
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多