我在java中有一个二维数组。在这里,我想检查一对值的存在。但我一直都是假的。
int[][] test_use = new int[1][2];
test_use[0][0] = 2;
test_use[0][1] = 6;
int[][] constraints = new int[1][2];
constraints[0][0] = 2;
constraints[0][1] = 6;
System.out.println(Arrays.asList(constraints).contains(test_use));
你们对这个问题有什么想法吗?我怎么能正确检查它的存在。非常感谢你!
答案 0 :(得分:1)
Java集合上的contains()方法对每个包含的对象使用equals()方法,以检查是否包含比较对象。
数组的equals方法只是从Object继承,它比较对象是否是同一个对象,而不是它们是否在逻辑上等效。
您正在创建2个不同的数组并将它们与equals()进行比较,并且它们不是同一个对象,因此它们的equals方法返回false,因此contains返回false。
因此,这也打印错误:
System.out.println(new int[]{i,j}.equals(new int[]{i,j}));
如果您想获得正确的结果,您可以自己实施比较:
int[][] arr = new int[1][2];
arr[0] = new int[]{2,6};
List<int[]> l = Arrays.asList(arr);
for (int[] check : l) {
if(check[0] == 2 && check[1] == 6) {
System.out.println(true);
return;
}
}
System.out.println(false);
答案 1 :(得分:0)
这样的事情可以让你得到你想要的东西。
System.out.println(Arrays.asList(constraints).contains(test_use[0][1]));
答案 2 :(得分:0)
您可以使用这样的函数,在您偏好的类中定义:
public bool contains(int[][] container, int[][] isContained){
bool miss = false;
for(int i = 0; i < isContained.length && !miss; i++){
for(int j = 0; j < isContained[i].length && !miss; j++){
if(container.length > i && container[i].length > j){
if(container[i][j] == isContained[i][j]) {
continue;
}
}
miss = true;
}
}
return !miss;
}