簡體   English   中英

采集 <E> 和集 <E> 是相同的?

[英]Collection<E> and Set<E> are the same?

我對Java中的這兩個接口有疑問。 設置擴展集合,但不添加任何內容。 它們完全一樣。 我在這里錯過了什么嗎?

設置不允許重復。

這是語義差異,而不是語法差異。

Collection的文檔:

集合表示一組對象,稱為其元素。 有些集合允許重復元素而其他集合則不允許。 有些是訂購的,有些是無序的。

Set的文檔:

不包含重復元素的集合。 更正式地說,集合不包含元素對e1e2 ,使得e1.equals(e2)和至多一個null元素。 正如其名稱所暗示的,該界面模擬數學集抽象。

這應該澄清Set和a(更通用的接口) Collection之間的區別。

好問題。 我想,與Collection的概念相比,明確具有Set概念的接口的主要目的是實際上正式區分這些概念。 假設您正在編寫方法

void x(Collection<?> c);

你不會對你想要得到什么參數有同樣的想法,就好像你在寫作一樣

void x(Set<?> s);

第二種方法期望Collections包含每個元素最多一次(即Sets )。 這與第一種方法有很大的語義差異,它不關心它是否接收SetsLists或任何其他類型的Collection

如果你仔細觀察, Set方法的Javadoc也是不同的,明確地顯示了在談論CollectionSet時發揮作用的不同概念。

集合是一個更通用的界面,包括列表,隊列,集等等。

這里查看“ 所有已知子接口 ”部分。

一切都在文檔中:

Set - 不包含重復元素的集合。 更正式地說,集合不包含元素對e1和e2,使得e1.equals(e2)和至多一個null元素。 正如其名稱所暗示的,該界面模擬數學集抽象。

集合 - 集合層次結構中的根接口。 集合表示一組對象,稱為其元素。 有些集合允許重復元素而其他集合則不允許。 有些是訂購的,有些是無序的。 SDK不提供此接口的任何直接實現:它提供了更具體的子接口(如Set和List)的實現。 此接口通常用於傳遞集合並在需要最大通用性的情況下對其進行操作。

它只是區分實現和未來的使用。

這來自Set理論和字典

收集 - 收集的東西; 在一個地方積累的一組物體或一定數量的物質,特別是出於某種目的或某些過程的結果

Set - 是不同對象的集合

此外, Set文檔定義.equals的合同,其中“只有其他集合可能等於此集合” 如果我們無法通過其類型(使用instanceof )識別其他集合,則無法實現此功能。

如果它僅用於equals()allowsDuplicates()以為Collection設置allowsDuplicates()方法。 但是通常情況下API會說“請不要給我重復”或“我保證這不包含重復”,而在Java中,沒有辦法在方法聲明中說“請僅提供其allowsDuplicates()方法返回false“。 因此附加類型。

暫無
暫無

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

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