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

时间:2014-04-14 20:28:14

标签: java arrays multidimensional-array contains

如果没有for loop,有没有办法查看multidimensional array中是否存在值?我找到了

 Arrays.asList(*ArrayName*).contains(*itemToFind*)

但这只会搜索数组的第一个维度,我需要搜索2个维度。

3 个答案:

答案 0 :(得分:2)

我创建了一个5x5整数数组,并以值i * j初始化。 Exists方法需要行号和值来搜索。

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);
}

答案 1 :(得分:0)

您可以使用Bloom过滤器(http://en.wikipedia.org/wiki/Bloom_filter)或为数组的键创建基于树的索引,例如Trie(http://en.wikipedia.org/wiki/Trie

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

答案 2 :(得分:0)

如果你想通过它的逻辑来解决问题,那么你几乎可以用递归做任何事情。在这种情况下,它不应该太难

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;

两者都不太粗糙。