我正在尝试执行一个程序,将两个链表中的元素相互比较。 一种方法是,我可以执行两个 for 循环并遍历两个列表,使用 .equals() 比较 list1 和 list2 中的每个元素。 另一种方法是,只是遍历第一个列表并检查 list1.contains(list1.get(i)) .. java 文档说,.contains 在内部执行 .equals。 如果是这样的话,与后者相比,前者的运行时间如何更长? 我误解了文档吗?如果我这样做了,当我使用 contains 时,内部比较究竟是如何进行的?
using equals:
for (int i = 0; i < list_one.size(); i++) {
for (int j = 0; j < list_one.size(); j++) {
if (list_one.get(i).equals(list_two.get(j))) { count++; }
using contains:
for (int i = 0; i < list_one.size(); i++) {
if (list_two.contains(list_one.get(i)) == true) { count++; }
最佳答案
一旦 equals
返回 true,contains
的实现将停止迭代,因此如果您要查找的元素位于列表的开头。如果您的版本不这样做,那就可以解释为什么它变慢了。
PS:无论哪种方式,运行时间仍然是二次方的。有更聪明的方法来解决这个问题,不需要为第一个列表中的每个项目迭代第二个列表(例如,首先对两个列表进行排序或使用集合)。
关于Java:.contains 和 .equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042685/