【发布时间】:2016-06-24 02:27:12
【问题描述】:
这是我创建的有效方法。我使用了 Arrays.deepEquals。它检查 int[][] 是否在 int[][] 之外的 ArrayList 内。感谢 Thomas,提供解决方案!
public boolean contains(int[][]matrix1, List<int[][]> matrice){
boolean contains = false;
for(int[][] m : matrice){
if(Arrays.deepEquals(m, matrix)){
contains = true;
index = matrice.indexOf(m);
}
}
return contains;
}
我有以下代码。我想从与矩阵具有相同值的矩阵中获取索引。我认为它不起作用,因为我正在检查引用而不是值。我就是想不通应该怎么做。
List<int[2][2]> matrice = new ArrayList<int[][]>();
int[][] matrix = new int[2][2]
public void testMethod(){
// here matrix gets a value
matrix = {{1,4}{3,2}};
//Here List matrice gets filled with different matrice (4x)
...
//add a copy of matrix to matrice
matrice.add(copy2dArray(matrix));
int index = matrice.indexOf(matrix);
System.out.println("matrix ->"Arrays.deepToString(matrix));
System.out.println("matrice[4] ->"Arrays.deepToString(matrice[4]));
System.out.println("index = "+index);
System.out.println(matrice.contains(matrix));
}
private int[][] copy2dArray(int[][] original){
int[][] copy = new int[original.length][];
for(int i = 0; i < original.length; i++){
copy[i] = Arrays.copyOf(original[i], original[i].length);
}
return copy;
}
输出:
matrix -> [[1,4],[3,2]]
matrice[4] -> [[1,4],[3,2]]
index = -1
false
输出应该是:
matrix -> [[1,4],[3,2]]
matrice[4] -> [[1,4],[3,2]]
index = 4
true
【问题讨论】:
-
为什么在你的例子中索引应该是4?
-
作为示例,它将是添加到矩阵列表的第 5 个矩阵。所以这将使它成为索引 4。只要它返回正确的索引,它就具有与矩阵相同的值。您可以在输出中看到 matrice[4] == index
-
copy2dArray可能不会返回完全相同的对象,indexOf将搜索matrix对象,而不是副本(因为数组的默认equals方法是 @987654329 @ ) . -
是的,我也是这么想的,但是你知道我该如何解决这个问题吗?我确实需要继续使用 ArrayList。
-
我选择了一个合适的遮阳篷,这不是让它成为合适的遮阳篷吗?
标签: java arraylist multidimensional-array contains indexof