繁体   English   中英

在Java中的列表中查找数组

[英]Finding an array within a list in Java

我正在尝试检查数组是否位于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.");
}

这将返回“我没有找到foo”。 当我尝试if (Stack.search(foo) != -1) ,如果在Stack中找到foo ,它将成功,结果相同。

如何在LinkedList或其他Vector / List类型的结构中搜索特定数组?

目前按照上述代码。 您尚未在链接列表中添加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.");
        }

看看这些问题: 比较Java中的两个整数数组和Java中的 equals vs Arrays.equals

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

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

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

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

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

由于数组继承自Object的默认equals()实现,因此使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM