0

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

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

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

非常感谢你的回答。

4

2 回答 2

1

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

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

于 2010-05-22T10:15:49.953 回答
1

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

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

于 2010-05-22T13:43:53.950 回答