在Java中查找列表中的数组
我试图检查数组是否位于LinkedList甚至堆栈结构中,如下所示:在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<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()
(但后来删除了帖子)。虽然这里不需要它,但如果您开始在列表或堆栈中保存多维数组,也可以使用它来正确比较嵌套数组。