【问题标题】:Which Java data object to use for multidimensional range matching?哪个 Java 数据对象用于多维范围匹配?
【发布时间】:2011-12-06 09:48:43
【问题描述】:

项目背景: 我正在为 java 编写一个可以使用 gdal2tile.py 瓷砖的地图瓷砖覆盖类。基本上,我最终会得到成千上万的 jpg 文件,它们的文件结构类似于 “缩放级别/X 坐标/Y 坐标” 坐标是整数,但不一定从 0 或 1 开始。 我将不得不搜索特定范围内的图块以找出需要渲染的图块。

我的问题: 我尝试使用文件结构本身进行迭代,但速度非常慢(不足为奇)。 我尝试使用文件结构和 .contains() 字符串的 ArrayList 进行迭代,但它似乎更慢(不太令人惊讶)。 理想情况下,我想使用一种数据结构,它可以让我在多个维度上选择一个范围,以便我可以调用类似的东西。

Tiles.getWhere(Zoom Level,min X,max X,min Y,maxY);

我认为某种 Collection 或 TreeMap 将是正确的选择,但我对 Java 的经验不足,无法确定,我不希望不必对许多不同的方法进行基准测试。

我可以使用 SQLite 来完成,但这似乎有点过头了。

我的问题: 在给定多维约束的情况下,检查数据集是否存在的最有效方法是什么?

【问题讨论】:

    标签: java android map arraylist treemap


    【解决方案1】:

    考虑到您的问题,我可以找出三个方向,您可以在接下来的搜索中瞄准这些方向(这不是手把手指南,而是为卡住的人提供开箱即用的开脑器您遇到的情况)

    1) Java 内置结构的使用。是的,确实,列表是搜索方法的最坏情况。顾名思义,Map 对地图来说要方便得多。它不仅是名称,而且与List 相比,对Map 的索引耗时明显减少。您可以将您的地图想象成一个立方体,如果您使用List,您必须处理其中大约一半的点,并且在您通过索引地图进行搜索时可能只有其中的一个狭窄层。有很大的差异。所以,我在这里的回答是:Map 是朝着正确方向发展的关键词(假设你在阅读我的回答后想这样做)

    2) 使用地图服务器解决方案。这可能与您的方法相去甚远,但整个框架都是为解决您的问题而设计的。一个例子是GeoServer。它为整个问题提供了现成的解决方案。它是解决您可能面临的重大问题的稳定解决方案:从源向用户显示地图。

    3) 坚持您使用的 GDAL 框架,您可以选择稍微不同的 py 文件,例如 gdal_proximity.py-哇! - 你手中有一个搜索的可能性!这个特殊的搜索中心点和距离,但会做你需要的东西=)

    有一个起点,我将如何做到这一点。这能起到什么作用吗?

    【讨论】:

      【解决方案2】:

      听起来你在寻找像区间树这样的东西。

      http://en.wikipedia.org/wiki/Interval_tree

      我过去已经实现了其中的一个,但只是在一个维度上。维基百科参考提到了更多维度的扩展。

      保罗

      【讨论】:

        【解决方案3】:

        您可能正在寻找具有多个键的地图。

        Commons-collections 提供了一个带有多个查找键的映射:

        http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html

        映射保证 O(1) 插入和 O(1) 选择时间。

        【讨论】:

        • 是的,这很完美——它满足了我的需求,也足够灵活,可以用于以后的项目。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 2013-06-07
        • 2014-02-12
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多