2010-05-22 42 views
0

我們在Collection下找到很多具體的子類。集合,哪個方法用於授權添加元素?

在試圖在具體集合中添加元素時,此集合將使用一種方法來確定它是否可以接受來存儲元素(並且最終該元素不在集合中)。 它可以使用元素的equals(),hashCode()compareTo()

是否有可能找到每個實施Collection使用哪種方法的總結?

非常感謝您的回答。

回答

1

首先,並非所有集合都檢查您添加的元素是否已存在於集合中。例如,ArrayList只是將元素附加到列表的尾部,而不檢查它是否已經在列表中。如果集合保證只有對象的一個​​副本,或者compareTo,如果元素應該是Comparable並且集合被排序(以找到插入它的正確位置),則其他類使用equals。 Maps也會使用equals來檢查關鍵字,但是一些像HashMap也會使用hashCode()來加速搜索過程(它們首先獲得具有相同散列碼的所有關鍵字,然後在每個關鍵字上使用equals來查找關鍵字鍵已經存在並且有一個賦值,然後將被替換)。

但是如果你想看看它們是如何工作的,你可以查看jdk包含的源代碼。 在eclipse中,我將JRE設置爲安裝jdk的文件夾,並且我可以使用CTRL + SHIFT + T在jdk中打開任何類(類型),CTRL +單擊類的名稱或方法,甚至CTRL + click - > open實現,這會打開一個彈出窗口,其中的類實現該方法(如果它來自接口,或者直接在類中的方法,如果不是)

1

任何具體的實現應該在API文檔中指出它對元素行爲的假設。

通常,基於散列的集合使用hashCode(),而基於樹的使用compareTo()Comparator,並且它們全部使用equals()

相關問題