没有for循环
,有没有其他方法来查看一个值是否存在于多维数组
中?我找到了一个示例:
Arrays.asList(*ArrayName*).contains(*itemToFind*)
但那只会搜索数组的第一个维度,我需要搜索两个维度。
没有for循环
,有没有其他方法来查看一个值是否存在于多维数组
中?我找到了一个示例:
Arrays.asList(*ArrayName*).contains(*itemToFind*)
但那只会搜索数组的第一个维度,我需要搜索两个维度。
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.
}
两者都不太粗糙。
可以。
您可以使用布隆过滤器(http://en.wikipedia.org/wiki/Bloom_filter)或为数组键创建基于树的索引,例如 Trie(http://en.wikipedia.org/wiki/Trie)
基本上,您需要一个数据结构来查找值,而不是键。这不会占用太多空间或速度,因为您可以在两个数据结构(您的和您选择的数据结构)中重复使用值对象的引用。
contains()
内部也使用循环。 - Ted Hopp