在Java中查找列表中的数组

时间:2015-04-14 03:51:58

标签: java arrays list

我试图检查数组是否位于LinkedList或Stack结构中,如下所示:

LinkedList<int[]> list = new LinkedList();
int foo = new int[]{1,2,3};
int bar = new int[]{1,2,3};
list.addLast(bar);
if(list.contains(foo)) {
   System.out.print("I found foo!");
} else {
   System.out.print("I didn't find foo.");
}

这回归&#34;我没有找到foo&#34;。 当我尝试if (Stack.search(foo) != -1)时,如果在foo中找到Stack,则会获得相同的结果。

如何搜索特定阵列的LinkedList或其他Vector / List类型结构?

4 个答案:

答案 0 :(得分:1)

目前按照上面的代码。您尚未在链接列表中添加foo。 并且你没有正确初始化int数组。

        LinkedList<int[]> list = new LinkedList();
        int[] foo = new int[]{1,2,3};
        int[] bar = new int[]{1,2,3};
        list.addLast(foo);
        list.addLast(bar);
        if(list.contains(foo)) {
           System.out.print("I found foo!");
        } else {
           System.out.print("I didn't find foo.");
        }

答案 1 :(得分:1)

查看以下问题: Comparing two integer arrays in javaequals vs Arrays.equals in Java

当处理数组时,Java中的==和equals()都返回被比较的两个数组是否是相同的对象,而不是它们的内容是否相同。 Arrays.equals()将比较数组的内容。

contains()方法使用equals()来检查它是否在列表中找到了给定对象,因此这里不起作用。你必须像这样手动搜索列表:

boolean foundArray = false;
for (int[] array : list) {
    if (Arrays.equals(array, foo)) {
        foundArray = true;
        break;
    }
}

答案 2 :(得分:0)

您正在搜索LinkedList中的数组引用是否与foo的引用相同。相反,您需要使用以下方法比较数组的内容:

for (int[] array : list) {
    if (Arrays.equals(array, foo)) {
        System.out.print("I found foo!");
    }
}

答案 3 :(得分:0)

由于数组从equals()继承了默认的Object实现,因此使用contains()将无法按预期工作。您需要迭代您的集合并使用Arrays实用程序类来查找匹配项

LinkedList<int[]> list = new LinkedList();

int bar = new int[] {1,2,3};
list.addLast(bar);

boolean found = false;
int foo = new int[] {1,2,3};

for (int[] arr : list) {
   if (Arrays.equals(foo, arr)) {
     found = true;
     break; // search no more
   }
}

if (found) {
     System.out.print("I found foo!");
} else {
   System.out.print("I didn't find foo.");
}

使用arr1.equals(arr2)与执行arr1 == arr2类似。要比较实际的数组内容,您应该使用Arrays.equals(arr1, arr2)