我们在Collection
下找到了很多具体的子类。
在尝试在具体集合中添加元素时,此集合将使用一种方法来确定它是否可以接受存储元素(并且最终该元素尚未存在于集合中)。
它可以使用元素的equals()
,hashCode()
或compareTo()
。
是否可以找到有关Collection
的每个实现使用哪种方法的摘要?
非常感谢您的回答。
答案 0 :(得分:1)
任何具体实现都应在其API文档中指出它对其元素行为的假设。
通常,基于散列的集合使用hashCode()
,而基于树的集合使用compareTo()
或Comparator
,并且所有集合都使用equals()
。
答案 1 :(得分:1)
首先,并非所有集合都会检查您添加的元素是否已存在于集合中。例如,ArrayList只是将元素附加到列表的尾部,而不检查它是否已经在列表中。如果保证集合只有一个对象副本,则其他类使用equals,如果元素应该是Comparable并且对集合进行排序(以找到插入它的正确位置),则使用compareTo。地图也会使用equals来检查密钥,但有些像HashMap也会使用hashCode()来加速搜索过程(他们首先获得具有相同哈希码的所有密钥,然后在每个密钥上使用equals来查找是否key已存在且已分配值,然后将被替换。)
但是如果你想看看它们是如何工作的,你可以查看jdk中包含的来源。 在eclipse中我将JRE设置为安装jdk的文件夹,我可以使用CTRL + SHIFT + T在jdk中打开任何类(类型),CTRL +单击类的名称,或者用于方法,甚至CTRL +点击 - > open实现,它打开一个弹出的类,实现该方法的类(如果是来自接口,或直接在类中的方法,如果不是)