我们在Collection
下发现了很多具体的子类。
当尝试在一个具体的集合中添加一个元素时,该集合将使用一个方法来确定它是否可以接受存储该元素(并最终确定该元素不在该集合中)。它可以使用元素的equals()
、hashCode()
或compareTo()
。
是否可以找到每个Collection
实现都使用哪种方法的摘要?
非常感谢你的回答。
发布于 2010-05-22 21:43:54
首先,不是所有的集合都要检查您添加的元素是否已经存在于集合中。例如,ArrayList只是将元素附加到列表的尾部,而不检查它是否已经在列表中。如果保证集合只有一个对象副本,则其他类使用equals;如果假设元素是可比较的,并且对集合进行排序,则使用compareTo (以找到正确的插入位置)。映射还将使用equals来检查键,但像HashMap这样的映射也将使用hashCode()来加快搜索过程(它们首先获取具有相同散列码的所有键,然后对每个键使用equals来查找键是否已经存在并分配了值,然后将替换该值)。
但是,如果您想了解它们是如何工作的,可以查看jdk附带的源代码。在eclipse中,我将JRE设置到安装jdk的文件夹中,并且我可以使用CTRL+SHIFT+T打开jdk中的任何类(类型),打开类名,或者对于方法,甚至可以打开CTRL+click -> CTRL+click实现,它会打开一个弹出窗口,其中包含实现该方法的类(如果它来自接口,或者直接在类中打开方法,如果不是接口)。
发布于 2010-05-22 18:15:50
任何具体的实现都应该在其API文档中指明它对其元素的行为所做的假设。
通常,基于哈希的集合使用hashCode()
,基于树的集合使用compareTo()
或Comparator
,并且它们都使用equals()
。
https://stackoverflow.com/questions/2887682
复制相似问题