检查值是否存在于多维数组java中



如果没有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)

基本上,您需要一个数据结构来查找值,而不是键。它不会花费太多空间或速度,因为您可以在两个数据结构(您的和您选择的)上重复使用值对象的引用

相关内容

  • 没有找到相关文章

最新更新