簡體   English   中英

為什么ArrayDeque不重寫equals()和hashCode()?

[英]Why doesn't ArrayDeque override equals() and hashCode()?

編輯:現在只考慮ArrayDeque。 (我原本以為LinkedList也沒有覆蓋這兩種方法。)

集合類型ArrayDeque只使用它從Object繼承的hashCodeequals方法實現。

為什么不用正確的實現覆蓋這些方法(即基於包含的元素的哈希和相等測試)?

LinkedList擴展了AbstractSequentialList ,它擴展了AbstractList覆蓋了equalshashCode - 所以實現不是Object繼承的。

另一方面, ArrayDeque實際上並沒有繼承任何其他實現,就我所知。 它的直接超類( AbstractCollection )不會覆蓋它們。 這感覺就像一個例外而不是規則 - 我相信Java中的大多數集合實現都“做正確的事”。

我不知道ArrayDeque選擇不實現相等的理由,但是如果你想比較兩個deques,你可以很容易地將它們轉換成列表或數組並以這種方式執行。

它們在AbstractList被覆蓋,它存在於LinkedList繼承中

對於將要變異的對象實例報告自己等於除了它們之外的其他任何東西通常沒有意義。 一些可變集合類型的實例報告自身與其他集合實例相同的主要原因是代碼保持對實例的引用是常見的,即使它們“可能”被突變,也不會。 盡管代碼可以保存對兩個ArrayDequeue引用,以便封裝曾經或將要放入其中的所有項目,並且比較為此目的而保留的兩個ArrayDequeue實例的內容可能是有意義的。 ,該類型的整個目的是促進物品的推拉; 如果equals檢查相同的內容是有意義的,那么將內容提取到其目的是封裝列表的類型中也是有意義的。

據官方Javadoc說 - 你不對。 LinkedList使用來自AbstractList的equals,執行深度等於

有關更多信息 - 請查看此內容 - http://docs.oracle.com/javase/6/docs/api/java/util/AbstractList.html#equals(java.lang.Object)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM