Java中集合接口和集合接口的区别是什么?

Java中集合接口和集合接口的区别是什么?,java,collections,interface,set,marker-interfaces,Java,Collections,Interface,Set,Marker Interfaces,声明的方法签名似乎相等。那么,引入集合接口而不是直接实现集合的目的是什么呢?或者它只是一种标记接口?Set保证集合将包含唯一的元素(没有重复)。集合不能保证这一点 Set接口只包含从集合继承的方法,并添加了禁止重复元素的限制 Set还对equals和hashCode操作的行为添加了更严格的约定,允许对Set实例进行有意义的比较,即使它们的实现类型不同。如果两个集合实例包含相同的元素,则它们相等 注意,Set不保留插入元素的顺序。 如果需要保留元素的插入顺序,可以使用LinkedHashSet。

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

Set
保证集合将包含唯一的元素(没有重复)。
集合
不能保证这一点

Set接口只包含从集合继承的方法,并添加了禁止重复元素的限制

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

注意,
Set
不保留插入元素的顺序。 如果需要保留元素的插入顺序,可以使用
LinkedHashSet

我想我有点理解你想确切知道的东西。:)

JDK附带的源代码(src.zip)有两个接口,
Collection
Set
,在
Collection
接口中声明的所有方法都在
Set
接口中重新声明。 乍一看,重新声明这些方法似乎是多余的。但如果仔细观察,您会发现方法签名与
集合
接口保持相同,但注释会更改以描述实现类中方法的行为

为什么
Set
接口存在,如果集合接口在Set情况下足够(因为我们在
Set
接口中没有引入任何新方法)(仅供参考:这里我忽略在
Set
接口-
T[]toArray(T[]a);
)中引入的一种方法


Ans:假设有两个类ClassA和ClassB实现了集合接口,它们都存储唯一的元素(就像Set一样)。现在有了一个方法,比如说
populateSet(Collection setImpl)
并且您有特定于处理ClassA和ClassB的代码,这个方法的目的是您可以使用这个方法交换地传递ClassA和ClassB,到目前为止一切都正常。但是现在这个方法的问题是,您可以将ArrayList传递给这个方法,因为集合接口是泛型接口,您的方法将开始崩溃。这就是为什么我们还需要一个接口来将所有的set实现分类到一个单独的引擎盖下。

你在说什么语言?谢谢,在post中添加了“Java”Javadoc API说有什么区别?查看基于这些定义的类型和方法,以及约束:Set接口对所有构造函数的约定以及add、equals和hashCode方法的约定进行了附加规定,这些规定超出了从集合接口继承的规定。为了方便起见,这里还包括其他继承方法的声明。(这些声明随附的规范已针对集合接口进行了定制,但它们不包含任何附加规定。)“此处的标记解释了^^^它并不总是关于方法;有了集合接口,您可以在API中声明您期望或返回的是集合,而不是任意集合。