提问人:Robot.. 提问时间:10/15/2023 最后编辑:Robot.. 更新时间:10/15/2023 访问量:37
为什么我在使用 == 比较两个 SORTED arraylist [duplicate] 的元素时没有得到想要的结果
Why I not am getting desired result while using == to compare elements of two SORTED arraylist [duplicate]
问:
我想从两个 SORTED ARRAYLIST list1 和 list2 中为公共元素创建一个新的 Arraylist 我使用“==”运算符并得到错误的答案,我使用“.equals()”运算符并得到正确的答案。
我的问题是如果==正确不能检查ARRAYLIST的元素。 那么为什么我的答案列表不是空的,为什么其中存在一些元素。 为什么它正确检查了某些元素,然后又无法进一步检查它们。
list1 = [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 41, 42, 45, 46, 47, 49, 50, 51, 53, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 82, 83, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 100, 102, 103, 104, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 125, 126, 129, 130, 132, 133, 137, 138, 139, 140, 141, 145, 147, 148, 151, 152, 153, 154, 158, 159, 161, 163, 164, 165, 168, 169, 170, 172, 175, 176, 178, 179, 180, 181, 183, 184, 185, 186, 187, 188, 190, 191, 193, 194, 195, 196, 199, 200, 201, 203, 205, 206, 208, 209, 210, 211, 212]
list2 = [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 41, 42, 45, 46, 47, 49, 50, 51, 53, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 82, 83, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 100, 102, 103, 104, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 125, 126, 129, 130, 132, 133, 137, 138, 139, 140, 141, 145, 147, 148, 151, 152, 153, 154, 158, 159, 161, 163, 164, 165, 168, 169, 170, 172, 175, 176, 178, 179, 180, 181, 183, 184, 185, 186, 187, 188, 190, 191, 193, 194, 195, 196, 199, 200, 201, 203, 205, 206, 208, 209, 210, 211, 212]
list = [] --->答案列表
使用“==”运算符--->代码
while (i < list1.size() && j < list2.size()) {
if (list1.get(i)==list2.get(j)) {
list.add(list1.get(i));
i++;
j++;
} else if (list1.get(i)>list2.get(j)) {
j++;
} else {
i++;
}
}
System.out.println(list);
ANS 不正确
终于得到了列表 列表 = [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 41, 42, 45, 46, 47, 49, 50, 51, 53, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 82, 83, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 100, 102, 103, 104, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 125, 126]
使用“.equals()”运算符--->代码
while (i < list1.size() && j < list2.size()) {
if (list1.get(i).equals(list2.get(j))) {
list.add(list1.get(i));
i++;
j++;
} else if (list1.get(i)>list2.get(j)) {
j++;
} else {
i++;
}
}
System.out.println(list);
正确的 ANS
我得到的清单是 列表 = [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 33, 35, 36, 37, 38, 41, 42, 45, 46, 47, 49, 50, 51, 53, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 82, 83, 85, 87, 88, 90, 91, 92, 94, 95, 96, 97, 100, 102, 103, 104, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 125, 126, 129, 130, 132, 133, 137, 138, 139, 140, 141, 145, 147, 148, 151, 152, 153, 154, 158, 159, 161, 163, 164, 165, 168, 169, 170, 172, 175, 176, 178, 179, 180, 181, 183, 184, 185, 186, 187, 188, 190, 191, 193, 194, 195, 196, 199, 200, 201, 203, 205, 206, 208, 209, 210, 211, 212]
注意:主要问题是,如果“==”不是这个程序的合适运算符,为什么我没有得到完全空的列表,为什么我在列表中得到一些元素,为什么循环在中途终止。
也用于
使用 ---> “==” 但使用 -1 的代码;
while (i < list1.size() && j < list2.size()) {
if (list1.get(i)-1==(list2.get(j))-1) {
list.add(list1.get(i));
i++;
j++;
} else if (list1.get(i)>list2.get(j)) {
j++;
} else {
i++;
}
}
System.out.println(list);
}
有了这个代码,我得到了正确的答案
答:
Java 或其他类型只能保存 Objects。他们不能持有原语。为了绕过此限制,使用了原始包装类。因此,将产生编译器错误。但是,很好。ArrayList
Collection
ArrayList<int> foo;
ArrayList<Integer> foo;
由于 an 是一个对象,所以这一行问的是“Are and the same reference?”,就像问 if 和 are the same reference(即同一个 Object)一样。Integer
if (list1.get(i)==list2.get(j))
list.get(i)
list2.get(j)
if (bar == bin)
bar
bin
但是,对于原始包装类,有自动装箱和自动取消装箱。当编译器看到类似 的东西时,会隐式调用。这允许您在大多数情况下将 Object 视为 。但是,使用或不是其中两个。int square = list1.get(i) * list1.get(i)
list.get(i).intValue()
Integer
int
==
!=
但是,显式地告诉编译器您要比较值,而不是引用。if (list1.get(i).equals(list2.get(j)))
不能将 、 、 或 与引用一起使用。因此,当编译器看到 时,将使用自动拆箱。您也不允许在参考文献上使用算术。因此,当编译器看到 时,会导致使用自动拆箱。>
<
<=
>=
if (list1.get(i)>list2.get(j))
if (list1.get(i)-1==(list2.get(j))-1)
-1
评论
1
==
int
Integer
==
Integer
Comparable
界面的好时机,例如 .==
int comp = list1.get(i).compareTo(list2.get(j)); if (comp == 0) {} else if (comp > 0) {} else {}