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还对equals和hashCode操作的行为添加了更严格的约定,允许对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中声明您期望或返回的是集合,而不是任意集合。