Java中Collection和Set接口有什么区别?

时间:2014-02-17 19:25:07

标签: java collections interface set marker-interfaces

声明的方法签名似乎相等。那么引入Set接口而不是直接实现Collection的目的是什么?或者它只是一种标记界面?

2 个答案:

答案 0 :(得分:0)

Set保证集合将包含唯一元素(无重复元素)。 Collection并不能保证这一点。

  

Set接口仅包含从Collection继承的方法,并添加禁止重复元素的限制。

     

Set还为 equals hashCode 操作的行为添加了更强的契约,允许对Set实例进行有意义的比较,即使它们的实现类型不同。如果两个Set实例包含相同的元素,则它们是相等的。

The Set Interface

注意,Set不保留插入元素的顺序。 如果您需要保留元素的插入顺序,则LinkedHashSethttps://stackoverflow.com/a/821104/4587961

答案 1 :(得分:0)

我想我有点理解您想确切知道的内容。 :)

JDK(src.zip)附带的源代码有2个接口,CollectionSet,并且在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接口是通用的,您的方法将开始崩溃。这就是为什么我们需要一个接口将所有设置的实现归为一类。