2013-12-15 27 views
1

我已经获得了我尝试使用的相当大比例的二维数据,每个数据都有一个(x, y)坐标,然后找到一组数据在那个坐标上。用于Java中的HashMap的二维可迭代键

我现在正在做的只是使用一个HashMap来循环,通过检查坐标的方法知道什么时候进入下一个'line'(所以如果数据是[0-10]为x然后它测试11(和倍数)计算在哪里显示一条新线)。这相当麻烦,我希望有一个更简单的解决方案,但我还没有能够找到一个适合Google或SO的。

我想要做的东西以下伪码: 的HashMap thisMap =(键= IntArray [] [],值= IntArray []) 我在哪里可以设置一个特定的2-d int数组作为整个事物的关键,然后通过一个循环来分配值(并且容易获得值),这是一种可迭代的方式。我能想到的最接近的东西是PHP如何处理多维数组,以及foreach(),您可以在其中嵌套foreach()循环,但我不确定这在Java中如何工作。

目标是最终能够写出两个方法,一个将沿着​​(第一位)迭代,然后进入下一行;另一个将它视为“帧”并遍历Y-axis。我不想让任何人为我写这些,甚至是HashMap代码,但我希望能够指出正确的方向,如何做到这一点(如果可能的话),只需要Java SE中提供的标准库而不是压倒一切。如果没有,那么希望能够指导如何安全地重载。

注意

这里的另一个问题是,这组数据是相当大的,和我最初试图做的是我自己写的Tuple class,但我第一次使用它,我跑出来的堆内存,这就是为什么我试图坚持一个单一的2-d基本诠释数组为此。

编辑

我发现这些: 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?

但他们似乎没有要试图实现同样的事情。

EDIT 2

另一个复杂的是,在Y-axis键是不连续的,虽然他们是有序的从低到高。

回答

0

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

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

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

如果你的代码看起来很复杂和麻烦,那么把它分解成许多方法可能是有意义的。当我在java中编写复杂的算法时,我试图遵循一个保持每个方法少于十行代码的规则。我将其全部映射到流程图中,每个方法都有一个框,箭头指向算法循环中方法之间的控制流。

这是回答您的问题吗?这是很难理解你的问题的要点,因为它似乎在你写作时仍然在思考。