声明的方法签名似乎相等。那么引入Set接口而不是直接实现Collection的目的是什么?或者它只是一种标记界面?
答案 0 :(得分:0)
Set
保证集合将包含唯一元素(无重复元素)。 Collection
并不能保证这一点。
Set接口仅包含从Collection继承的方法,并添加禁止重复元素的限制。
Set还为 equals 和 hashCode 操作的行为添加了更强的契约,允许对Set实例进行有意义的比较,即使它们的实现类型不同。如果两个Set实例包含相同的元素,则它们是相等的。
注意,Set
不保留插入元素的顺序。
如果您需要保留元素的插入顺序,则LinkedHashSet
。
https://stackoverflow.com/a/821104/4587961
答案 1 :(得分:0)
我想我有点理解您想确切知道的内容。 :)
JDK(src.zip)附带的源代码有2个接口,Collection
和Set
,并且在Collection
中声明了在Set
接口中声明的所有方法。接口。
乍一看,重新声明方法似乎很多余。但是,如果仔细观察,您会发现方法签名与Collection
接口保持相同,但是注释已更改,以描述实现类时方法的行为。
为什么 Set
接口存在,如果在使用Set的情况下收集接口足够用(因为我们没有在Set
接口中引入任何新方法)(仅供参考)我忽略了Set
界面中引入的一种方法-<T> T[] toArray(T[] a);
)。
Ans :假设您有两个实现Collection接口的ClassA和ClassB,它们都存储唯一的元素(就像Set一样)。现在您有了一个说populateSet(Collection setImpl);
的方法,并且具有处理ClassA和ClassB的特定代码,该方法的目的是可以使用此方法来交替传递ClassA和ClassB,到目前为止,一切都还可以。但是现在这种方法的问题是您可以将ArrayList传递给此方法,因为Collection接口是通用的,您的方法将开始崩溃。这就是为什么我们需要一个接口将所有设置的实现归为一类。