[英]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.