【问题标题】:Using contains() method in java在 java 中使用 contains() 方法
【发布时间】:2019-05-03 17:57:51
【问题描述】:

我可以使用 contains() 来检查我尝试在 Arraylist 中插入的元素是否已经存在?

protected void addTeacher(Teacher t){
        if (!(teacherList.contains(t)))
            teacherList.add(t);
    }

我创建了一个教师类。 谢谢,

【问题讨论】:

    标签: java contains


    【解决方案1】:

    在您的 Teacher 类中,您应该重写 equals 方法并为程序定义您的两个对象相等的策略。然后就可以完美使用 contains 方法了。

    请注意,更好的解决方案是使用 Set

    Set 永远不会在其中保存重复的对象。使用 Set you 应该覆盖 equals 和 hashCode 方法。

    参考这个帖子,我为其他有类似问题的人解释清楚 -> equals and hashCode methods

    【讨论】:

    • 谢谢。为什么我应该使用 set,如果在 arraylist 中我只需要覆盖一个方法(等于)并且使用 set 必须覆盖其中两个?
    • @PedroMateus 覆盖仅在 Teacher 类中,这是在 java 中处理 Set 集合的策略。但是一旦你重写了这两个方法,你就全部设置好了,你可以使用任何类型的 Set 风格,比如 HashSet。 equals 和 hashCode 方法可以由您的 IDE 自动生成。请参阅我在答案中放置的链接。如果您想了解更多关于 Java 中的 Set 集合的信息,请参阅此链接 -> docs.oracle.com/javase/tutorial/collections/interfaces/set.html
    【解决方案2】:

    是的,您可以使用 contains 方法。如果您追求有意义的(即两个对象的所有字段具有相同的值)相等,而不仅仅是对象引用,则需要实现 equals() 方法。

    查看这里的 Oracle 文档:https://docs.oracle.com/javase/7/docs/api/java/util/List.html#contains(java.lang.Object)

    【讨论】:

      【解决方案3】:

      是的,使用 .contains() 应该适用于您的情况。但是,根据其余代码的外观,您可能需要考虑使用 ArrayLists 以外的其他代码。例如,如果您使用set,则不必使用.contains(),因为set 不能保存重复项。

      【讨论】:

        猜你喜欢
        • 2013-12-02
        • 2017-08-31
        • 2014-08-20
        • 2015-07-03
        • 2019-05-09
        • 1970-01-01
        • 2017-04-04
        • 2013-04-13
        • 1970-01-01
        相关资源
        最近更新 更多