Java 2维整数数组检查是否存在

时间:2014-09-24 16:10:24

标签: java arrays matrix

我在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));

你们对这个问题有什么想法吗?我怎么能正确检查它的存在。非常感谢你!

3 个答案:

答案 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;

}