声明的方法签名似乎是相等的。那么引入Set接口的目的是什么,而不是直接实现Collection接口?或者这只是一个标记接口吗?
Set
保证集合中包含唯一元素(无重复项)。Collection
不保证这一点。
Set
接口仅包含从Collection
继承的方法,并添加了禁止重复元素的限制。
Set
还对equals和hashCode操作的行为添加了更强的约定,即使它们的实现类型不同,也允许有意义地比较Set
实例。如果两个Set
实例包含相同的元素,则它们是相等的。
注意,Set
不保留插入元素的顺序。如果需要保留元素的插入顺序,则使用LinkedHashSet
。
https://dev59.com/MXRA5IYBdhLWcg3wzhRY#821104
我想我有点明白你想要了解的内容了。 :)
JDK(src.zip)附带的源代码有两个接口,Collection
和Set
,并且在Set
接口中重新声明了Collection
接口中声明的所有方法。
乍一看,重新声明这些方法似乎是多余的。但是如果你仔细观察,就会发现方法签名与Collection
接口相同,但注释已更改以描述实现类中方法的行为。
为什么存在Set
接口,如果在Set的情况下,集合接口已经足够(因为我们没有在Set
接口中引入任何新方法)(FYI:这里我忽略了一个在Set
接口中引入的方法- <T> T[] toArray(T[] a);
)。
populateSet(Collection setImpl);
,并且您有特定于处理ClassA和ClassB的代码,此方法的目的是您可以使用此方法交替传递ClassA和ClassB,到目前为止一切都好。但是现在这个方法的问题是您可以将ArrayList传递给此方法,因为Collection接口是通用的,您的方法将开始破裂。这就是为什么我们需要一个更多的接口来将所有集合实现分类的原因。