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);
题目什么的先不说,第一行代码是不是少个括号