gpt4 book ai didi

java - 如何返回一个新列表,其中包含一个列表中未在另一个列表中找到的对象

转载 作者:行者123 更新时间:2023-12-02 03:21:36 25 4
gpt4 key购买 nike

例如,list1 具有“a,b,c”,list2 具有“b,c,t”。因此,应该返回“a”。

这是我的代码:

public static <E> List<I> ReturnDifference(List<E> L1, List<E> L2)
{
List<E> L3 = new ArrayList<I>();
Iterator<E> iter1 = L1.iterator();
while (iter1.hasNext())
{

String s1 = (String)iter1.next();
Iterator<E> iter2 = L2.iterator();

while (iter2.hasNext())
{
String s2 = (String)iter2.next();

if (s1.compareTo(s2) != 0)
{
L3.add((E)s1);
}
}
}
return L3;
}

谢谢你帮助我!

最佳答案

其他答案指出有第三方库可以做这种事情。他们会以更少的努力完成这项工作......并且比您的代码可能更高效。

但是,我假设这是一个“学习练习”。这是您的代码中的一些问题。

从最基本的开始:

  1. 使用“foreach”语法:

       Iterator<T> it = x.iterator();
    while (it.hasNext()) {
    T t = it.next();
    ...
    }

    相当于

       for (T t: x.iterator() {
    ...
    }
  2. 如果您调用 ReturnDifference,您对类型转换的使用将会中断。任何不是字符串列表的参数。

      String s1 = (String)iter1.next();

    应该是

      E s1 = iter1.next();

    等等。

  3. 您不需要使用compareTo 。使用equals反而。这具有适用于未实现 Comparable<E> 的元素类型的优点。 .

  4. 为什么返回参数类型为 I 的列表不是E

  5. 许多样式错误。最重要的是:

    • 方法名称必须1以小写字母开头。
    • 变量名称必须以小写字母开头。

最后,您的代码中存在明显的逻辑错误:

 if (s1.compareTo(s2) != 0) {
L3.add((E)s1);
}

如果您查看该语句在代码中的位置,并思考一下...很明显您将向 L3 添加相同的元素。多次。

我将把它留给你来弄清楚该怎么做。

<小时/>

1 - 从技术上讲,编译器允许您忽略这一点,但您>>可能<<给自己带来麻烦。但更重要的是,如果你要求一位经验丰富的 Java 程序员阅读严重忽略样式约定的代码,他/她很可能会断然拒绝。

关于java - 如何返回一个新列表,其中包含一个列表中未在另一个列表中找到的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542039/

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