簡體   English   中英

Java中的Collection和Set接口之間有什么區別?

[英]What is the difference between Collection and Set interfaces in Java?

聲明的方法簽名似乎相等。 那么引入Set接口而不直接實現Collection的目的是什么? 還是這里只是一個標記界面?

Set保證集合將包含唯一元素(無重復)。 Collection不能保證這一點。

Set接口僅包含從Collection繼承的方法,並增加了禁止重復元素的限制。

Set還對equalshashCode操作的行為增加了更強的約定,從而即使它們的實現類型不同,也可以有意義地比較Set實例。 如果兩個Set實例包含相同的元素,則它們相等。

設置界面

注意, Set不會保留元素插入的順序。 如果需要保留元素的插入順序,請使用LinkedHashSet https://stackoverflow.com/a/821104/4587961

我想我有點理解您想確切知道的內容。 :)

JDK(src.zip)附帶的源代碼有兩個接口,即CollectionSet並且在Set接口中重新聲明了在Collection接口中聲明的所有方法。 乍一看,重新聲明方法似乎很多余。 但是,如果仔細觀察,您會發現方法簽名與Collection接口保持相同,但是注釋已更改,以描述實現類時方法的行為。

如果在Set的情況下收集接口足夠, 為什么存在Set接口(因為我們沒有在Set接口中引入任何新方法)(供參考:在這里,我忽略了Set接口中引入的一種方法- <T> T[] toArray(T[] a); )。

回答 :假設您有兩個實現Collection接口的類ClassA和ClassB,並且它們都存儲唯一的元素(就像Set一樣)。 現在您有了一個方法,可以說populateSet(Collection setImpl); 並且您具有處理ClassA和ClassB的特定代碼,並且此方法的目的是您可以使用此方法來交替傳遞ClassA和ClassB,到目前為止,一切正常。 但是現在這種方法的問題是您可以將ArrayList傳遞給此方法,因為Collection接口是通用的,您的方法將開始崩潰。 這就是為什么我們需要一個接口將所有設置的實現歸為一類。

暫無
暫無

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

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