【问题标题】:2-Dimensional iterable key for HashMap in JavaJava中HashMap的二维可迭代键
【发布时间】:2014-01-02 16:52:38
【问题描述】:

我正在尝试处理相当大部分的二维数据,每条数据都有一个 (x, y) 坐标,然后是位于该坐标的数据数组。

我现在正在做的只是使用HashMap 循环遍历它,并使用一种方法检查坐标以知道何时转到下一个“行”(因此,如果数据是 [0-10 ] 对于x 然后它测试11(和倍数)以计算在哪里显示新行)。这相当麻烦,我希望有一个更简单的解决方案,但我无法在 Google 或 SO 上找到适合的解决方案。

我想要做的是以下伪代码: HashMap thisMap = (key = IntArray[][], value = IntArray[] ) 我可以将特定的二维 Int 数组设置为整个事物的键,然后以可迭代的方式通过循环分配值(并同样轻松地获取值)。我能想到的最接近的事情是PHP 如何处理多维数组和foreach() 可以在其中嵌套foreach() 循环,但我不确定这在Java 中如何工作。

最终目标是能够编写两个方法,一个将沿着X-axis(第一个数字)进行迭代,然后继续下一行;另一个将其作为“框架”并迭代Y-axis。我不希望任何人为我编写这些,甚至是 HashMap 代码,但我希望仅使用 Java SE 中可用的标准库就如何做到这一点(如果可能的话)指出正确的方向而不是覆盖任何东西。如果没有,那么希望指导如何安全地覆盖。

注意

这里的另一个问题是数据集相当大,我最初尝试做的是自己写Tuple class,但是我第一次使用它时堆内存用完了,这就是为什么我'我试图为此坚持使用单个二维原始 int 数组。

编辑

我找到了这些: Java usage of HashMap or Map with multidimensional arrays

Java HashMap associative multi dimensional array can not create or add elements

How to implement a Map with multiple keys?

但是他们似乎并没有试图达到同样的目的。

编辑 2

另一个复杂的问题是Y-axis 中的键不是连续的,尽管它们是按从低到高的顺序排列的。

【问题讨论】:

    标签: java hashmap iteration multidimensional-array


    【解决方案1】:

    听起来您的要求涉及混合模型和视图,因为您的视图包含 x,y 坐标,并且您有与每个 x,y 坐标相关联的数据。虽然我通常尽量不混合模型和视图,但您的要求让我想到了writeableraster。可写栅格是一维像素数组,但它从窗口的左上角开始并迭代行和列,直到到达右下角。我认为它是逐列的,但它可能是逐行的。您可以通过协调可写栅格的索引与窗口的宽度/高度来计算行和列。

    可写栅格非常快,因为您直接写入像素数组。然后,您通过缓冲图像和/或附加到 JPanel 或 Canvas 的图形对象将其发送到 gui。

    关于迭代结构,我使用arraylists of arraylists来处理多变量结构。数组列表的好处是它们可以是可变长度的,这与在实例化时需要定义长度的数组不同。但是,无论您使用嵌套数组列表还是嵌套数组,您都可以根据需要嵌套尽可能多的层,以便处理数据结构。

    如果您的代码看起来复杂而繁琐,那么将其分解为许多方法可能是有意义的。当我在 java 中编写复杂的算法时,我尝试遵循将每个方法保持在少于十行代码的规则。我将其全部绘制在流程图中,每个方法都有一个框,箭头指向算法循环时方法之间的控制流。

    这是否回答了您的问题?有点难以理解您的问题的要点,因为您似乎在编写它时仍在思考它。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 2011-03-16
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多