二维数组中如何查询一个数组是否存在

String[][] stas ={{"1","2"},{"2","2"};
string[] s = {"1","2"};
如何快速判断s是否在stas中存在

只能遍历,没有别的办法
除非你要比较的东西是可哈希的

一种思路,设计一个函数 入参是两个数组 然后遍历 先查找第一行,使用二分查找判断是否存在,如果存在则通过参数found返回true,如果不存在,返回行里最大小于查找数的列号,如查找的是7,第一行不存在,那么返回2所在的下标。之后根据列号查找,如果存在则返回true,不存在则返回false,end。

看一下这个简单的Demo

public static void main(String[] args) {
        String[][] sourceStrs = new String[][]{{"1","2"},{"1","3"}};
        String[] targetStrs = new String[]{"1","3"};
        boolean flag = false;
        for (String[] sourceStr : sourceStrs) {
            //检查长度是否一致
            if (sourceStr.length != targetStrs.length) {
                continue;
            }
            //挨个检查元素
            for (int j = 0; j < sourceStr.length; j++) {
                if (!sourceStr[j].equals(targetStrs[j])) {
                    break;
                }
                if (j == sourceStr.length - 1) {
                    flag = true;
                    break;
                }
            }
        }
        if(flag){
            System.out.println("存在");
        } else {
            System.out.println("不存在");
        }
    }

感觉可以把一维数组包装成一个集合元素,存入到Set集合里面;重写equals和hashcode方法,这样速度会快很多;

可以利用java8提供的streamAPI流来做:
1.将父数组转换为stream遍历子数组
2.将父数组的子数组计算为hash值使用Arrays.hashCode()
3.使用Arrays.hashCode()计算出要匹配的数组,判断hash值是否相等,避免有hash一致的情况下与equals同时比较.
实例代码:

String[][] parentArrays = {{"1","1"},{"1","2"},{"1","3"}};
String[] array = {"1","2"};
boolean isExist = Arrays.stream(parentArrays).anyMatch(s -> Arrays.hashCode(s) == Arrays.hashCode(array) && Arrays.equals(s,array));
System.out.println(isExist);

题目什么的先不说,第一行代码是不是少个括号