我需要存储许多矩阵,然后通过检索添加的最后一个矩阵和前一个矩阵来比较其中一些矩阵。
我使用以下方法创建这些矩阵:
int[][] matrix = new int[10][10];
我的矩阵只有0s,1s和2s。我想根据每个位置的值比较矩阵。在我的例子中,只要至少一个位置具有不同的值,两个矩阵就不同。 基于通过Reactivision检测到的元素创建每个矩阵。未移动的元素是2s,添加的元素是1,而没有任何东西的元素是0。
例如:
1 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
和
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
会有所不同。
存储的矩阵数量不固定。如果我已经创建了10个矩阵,那么存储这些矩阵的最有效方法是什么?并且能够比较它们?
我已经在StackOverFlow和其他论坛上搜索过此内容,但无法找到答案
答案 0 :(得分:1)
由于矩阵中的许多(可能是大多数)条目都是零,因此将它们存储为是低效的。您需要使用稀疏矩阵表示。 Here is a pretty exhaustive list of matrix libraries,其中许多允许稀疏表示。
他们中的大多数也已经有equals()
方法,您可以覆盖以适合您的定义(或者,如果他们的定义已经与您的定义相同,则不会覆盖)。
最后,由于您只需要比较最后两个矩阵,因此需要某种队列。我会维护一个列表,并为此使用ListIterator
。
答案 1 :(得分:0)
由于您没有提供任何代码,我只能帮助您进行设计。 那么,这里有一些设计技巧:
将矩阵存储在二维数组中
Ex:int[][] matrix = new int[5][3];
这会为您提供5x3矩阵。
由于您不知道您将拥有多少个矩阵,因此请将它们添加到arraylist中。
例如:ArrayList<int[][]> matrices = new ArrayList<>();
我不知道您的比较是什么意思,但是,您可以使用嵌套的for循环,通过从arraylist中逐个检索矩阵进行比较。
答案 2 :(得分:0)
我会写一个不同的课程Matrix
,并会覆盖equals
和hashcode
方法。
如果矩阵中的大多数值都为零,则可能需要使用稀疏矩阵表示。