Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中查找列表中的数组_Java_Arrays_List - Fatal编程技术网

在Java中查找列表中的数组

在Java中查找列表中的数组,java,arrays,list,Java,Arrays,List,我试图检查数组是否位于LinkedList甚至堆栈结构中,如下所示: 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(

我试图检查数组是否位于LinkedList甚至堆栈结构中,如下所示:

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.");
}
LinkedList=新建LinkedList();
int foo=新的int[]{1,2,3};
int bar=新的int[]{1,2,3};
list.addLast(bar);
if(列表包含(foo)){
System.out.print(“我找到了foo!”);
}否则{
System.out.print(“我没有找到foo”);
}
这返回“我没有找到foo”。 当我尝试
if(Stack.search(foo)!=-1)
时得到了相同的结果,如果在
堆栈中找到
foo
,则会成功


如何在LinkedList或其他向量/列表类型结构中搜索特定数组?

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

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

目前按照上述代码。您尚未在链接列表中添加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.");
        }
LinkedList=新建LinkedList();
int[]foo=新的int[]{1,2,3};
int[]条=新的int[]{1,2,3};
list.addLast(foo);
list.addLast(bar);
if(列表包含(foo)){
System.out.print(“我找到了foo!”);
}否则{
System.out.print(“我没有找到foo”);
}
查看以下问题: 和

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

contains()方法使用equals()检查是否已在列表中找到给定对象,因此在这里不起作用。您必须手动搜索列表,如下所示:

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

由于数组从
对象继承默认的
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.");
}
LinkedList=新建LinkedList();
int bar=新的int[]{1,2,3};
list.addLast(bar);
布尔值=false;
int foo=新的int[]{1,2,3};
对于(int[]arr:list){
if(Arrays.equals(foo,arr)){
发现=真;
break;//不再搜索
}
}
如果(找到){
System.out.print(“我找到了foo!”);
}否则{
System.out.print(“我没有找到foo”);
}

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

这样您就可以比较原语值而不是数组。在看到以前的响应后,这正是我完成并实现代码的方式。请注意,有人也发布了关于
Arrays.deepEquals()
(但后来删除了帖子)。虽然这里不需要它,但如果您开始在列表或堆栈中保存多维数组,也可以使用它来正确比较嵌套数组。