【问题标题】:Collection, which method is used to authorize an add of an element?集合,使用哪种方法来授权添加元素?
【发布时间】:2010-05-22 10:10:33
【问题描述】:

我们在Collection下找到很多具体的子类。

当尝试在具体集合中添加元素时,该集合将使用一种方法来确定它是否可以接受存储该元素(并最终确定该元素不在集合中)。 它可以使用元素的equals()hashCode()compareTo()

是否可以找到关于Collection 的每个实现使用哪种方法的摘要?

非常感谢您的回答。

【问题讨论】:

    标签: java collections equals add hashcode


    【解决方案1】:

    首先,并非所有集合都会检查您要添加的元素是否已存在于集合中。例如 ArrayList 只是将元素附加到列表的尾部,而不检查它是否已经在列表中。如果保证集合只有一个对象副本,则其他类使用 equals 或 compareTo,如果元素应该是 Comparable 并且对集合进行排序(以找到插入它的正确位置)。 Maps 也会使用 equals 来检查键,但有些像 HashMap 也会使用 hashCode() 来加快搜索过程(它们首先获取具有相同 hashcode 的所有键,然后对每个键使用 equals 来查找是否键已经存在并分配了一个值,然后将被替换)。

    但是,如果您想了解它们是如何工作的,您可以查看 jdk 中包含的源代码。 在eclipse中,我将JRE设置为安装jdk的文件夹,我可以使用CTRL+SHIFT+T打开jdk中的任何类(类型),CTRL+单击类的名称,或者方法,甚至CTRL+单击 -> 打开实现,这会打开一个弹出窗口,其中包含实现该方法的类(如果它来自接口,或者直接在类中的方法,如果不是)

    【讨论】:

      【解决方案2】:

      任何具体的实现都应该在其 API 文档中说明它对其元素行为的假设。

      通常,基于散列的集合使用hashCode(),基于树的集合使用compareTo()Comparator,它们都使用equals()

      【讨论】:

        猜你喜欢
        • 2015-03-26
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 2022-12-18
        相关资源
        最近更新 更多