当前位置: 首页 > 知识库问答 >
问题:

将两个ArrayList与相同类型的对象进行比较。如何获取除第二个列表中包含的元素之外的第一个列表中的所有元素?

楚良平
2023-03-14

我正在研究基本的学生系统。学生有他的sudy字段。每个研究领域都分配了一些科目。每个学生都被分配了两个科目。现在我需要得到并打印所有分配到他的研究领域的其他科目,这些科目还没有分配给他。这是我尝试过的

        ArrayList<Predmet> dostupnePredmety = new ArrayList<Predmet>();
        for (Predmet vPredmet : this.loggedStudent.getOdbor().getPredmety()) {
            for ( Predmet sPredmet : this.loggedStudent.getPredmety()) {
                if (vPredmet != sPredmet) {
                    dostupnePredmety.add(vPredmet);
                }
            }
        }
        int i = 0;
        for (Predmet dPredmet : dostupnePredmety) {
            System.out.println("[" + i + "]" + dPredmet.getNazov() + " " + dPredmet.getPocetStudentov() + "/" + dPredmet.getCapacity());
            i++;
        }

它不起作用,因为我使用的第二个for循环将第一个列表的元素与第二个列表的每个元素进行比较,所以它添加了所有元素。即使是我不想要的。这很明显,因为第一个列表中的对象需要与第二个列表中的所有元素相同,才能工作。我想不出正确的解决办法。

共有1个答案

何飞翰
2023-03-14

有两种可能的解决方案,我推荐第二种,因为它在计算上更有效。

先决条件:

对于这两种解决方案,您需要首先重写equals()hashCode()方法

解决方案1(较短代码):

    for (Predmet vPredmet : this.loggedStudent.getOdbor().getPredmety()) {
            if (!this.loggedStudent.getPredmety().contains(vPredmet)) {
                dostupnePredmety.add(vPredmet);
            }
    }

解决方案2(计算效率最高):

    Set<Predmet> set = new HashSet<>();
    for (Predmet predmety: this.loggedStudent.getPredmety()) {
        set.add(predmety);
    }
    for (Predmet vPredmet : this.loggedStudent.getOdbor().getPredmety()) {
            if (!set.contains(vPredmet)) {
                dostupnePredmety.add(vPredmet);
            }
    }
 类似资料:
  • 问题内容: 我有一个像下面这样的列表,其中第一个元素是id,另一个是字符串: 我只想从此元组列表创建ID列表,如下所示: 我将使用此列表,因此它必须是整数值的列表。 问题答案:

  • 假设我有两个列表,现在listOld包含旧员工信息,listNew包含新员工信息 我如何比较这两个列表并返回新列表,其中包含,添加的新员工列表,包含,删除的员工列表,包含上次更新已更改的员工的新列表? 我只能想到迭代列表和比较,可能最终几乎是O(n2)时间,这可以由任何util类更有效地完成吗?

  • 问题内容: 我有一个这样的清单: 我想要这样的结果(列表中的 每个 第一个元素): 我尝试了[:: 1] [0],但没有用 我几周前才开始学习Python。Python版本= 2.7.9 问题答案: 您可以从列表理解中的每个元素获取索引 同样,要学究,您没有的,您没有的。

  • 问题内容: 如何以简洁明了的方式找出两个列表中的第一个公共元素(在本例中为“ 2”)?任何列表都可以为空,也可以没有公共元素-在这种情况下,没有一个很好。 我需要它来向新手展示python,所以越简单越好。 UPD:顺序对于我的目的并不重要,但让我们假设我正在寻找x中的第一个元素,该元素也出现在y中。 问题答案: 这应该很简单 几乎和它一样有效 (要获得更有效的解决方案,请检查Ashwini Ch

  • 问题内容: 我有一个带有包含列表对象的列的Pandas DataFrame 如何访问每个列表的第一个元素并将其保存到DataFrame的新列中?要获得这样的结果: 我知道这可以通过遍历每一行来完成,但是有什么“ pythonic”方法吗? 问题答案: 您可以使用和功能

  • 有人请让我知道我如何才能达到预期的结果。如有任何帮助,不胜感激。 谢谢