如果没有for loop
,有没有办法查看multidimensional array
中是否存在值?我找到
Arrays.asList(*ArrayName*).contains(*itemToFind*)
但这只会搜索数组的第一个维度,我需要搜索2个维度。
我创建了一个二维数组,其中包含5行和五列。数组是int类型,并且已使用值i*j初始化。已经存在一个使用行号和值进行搜索的方法。
private static Integer[][] myarray = new Integer[5][5];
public static boolean exists(int row, int value) {
if(row >= myarray.length) return false;
List<Integer> rowvalues = Arrays.asList(Arrays.asList(myarray).get(row));
if(rowvalues.contains(value)) return true;
return exists(row+1, value);
}
如果你想在递归的逻辑中头疼的话,你几乎可以用递归做任何事情。在这种情况下,应该不会太难
private boolean checkForValue(int val, int row, int col){
if(row == numRows && col == numCols)
return false;
else{
if(values[row][col] == val)
return true
else if(col < (numCols - 1))
checkForValue(val, row, col + 1);
else
checkForValue(val, row + 1, 1);
}
}
然而,如果你只是想节省时间,我认为for循环启动确实非常有效
private boolean checkForValue(int val){
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numCols; j++){
if(values[i][j] == val) return true;
}
}
return false; //it will reach here if return true was not called.
}
两者都不太粗糙。
是。
您可以使用Bloom过滤器(http://en.wikipedia.org/wiki/Bloom_filter)或者为数组的键创建基于树的索引,例如Trie(http://en.wikipedia.org/wiki/Trie)
基本上,您需要一个数据结构来查找值,而不是键。它不会花费太多空间或速度,因为您可以在两个数据结构(您的和您选择的)上重复使用值对象的引用