gpt4 book ai didi

java - 使用方法来比较列表

转载 作者:行者123 更新时间:2023-12-01 06:32:46 25 4
gpt4 key购买 nike

我正在尝试使用一种方法来比较不同的列表。基本上,我想将两个不同的列表传递给一个方法,如果一个数组列表的元素使用 .contains 包含在另一个数组列表中,该方法将返回 true 或 false。现在它只返回 true - 我不知道为什么。我希望它返回 false。如果有人能帮我解决这个问题,那就太好了。

public class ArrayListTest {

public static void main(String[] args) {

List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();

list1.add("cat");
list1.add("dog");
list1.add("zebra");
list1.add("lion");
list1.add("mouse");

//Test Values
//list2.add("cat");
list2.add("lizard");

boolean doesitcontain = contains(list1, list2);
System.out.println(doesitcontain);


}

public static boolean contains (List<String>list1, List<String>list2){

boolean yesitcontains;

for(int i = 0; i < list1.size(); i++){

if(list2.contains(list1.get(i))){
System.out.println("Duplicate: "+list1.get(i));
yesitcontains = true;
System.out.println(yesitcontains);
}else{
yesitcontains = false;
System.out.println(yesitcontains);
}
}
if (yesitcontains = true){

return true;

}else

return false;

}

}

最佳答案

  1. 您无意中在本应使用相等运算符的地方使用了赋值运算符。根据您的具体情况,您应该重写所有这些:

    if (yesitcontains = true){

    return true;

    }else

    return false;

    }

    只是

    return yesitcontains;

    并避免任何可能的混淆。

  2. 此外,您的算法将不起作用,因为当您看到重复项时,您应该立即返回 true。相反,您继续循环并“忘记”您的发现。您可以期望它始终返回 false 除非最后一个元素重合。

  3. 在更广泛的背景下,我还应该给您以下一般性建议:

    • 避免对列表进行索引迭代。并非所有列表都是 ArrayList,并且 get(i) 的复杂度可能为 O(n)。而是使用增强的for循环,它更安全、更简洁、更明显;
    • 了解该库:如果您刚刚确认没有重复项,只需 Collections.disjoint(list1, list2)会给你你所需要的;
    • 注意算法复杂性:检查两个列表中的重复项的时间复杂度为 O(n2),但如果您将其中一个列表转换为 HashSet,您将得到O(n)。

考虑到上述所有内容,以下将是适当的实现:

static boolean disjoint(Collection<?> c1, Collection<?> c2) {
for(Object o : c1)
if (c2.contains(o))
return true;
return false;
}

如果您查看Collections.disjoint,您会发现这个完全相同的循环,前面有一段代码,出于上述原因优化了集合的使用。

关于java - 使用方法来比较列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com