我试图检查数组是否位于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类型结构?
答案 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 java和 equals 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)
。