集合<E>和集合<E>是一样的吗?

Yar*_*evi 4 java collections interface set

我对Java中的这两个接口有疑问.设置扩展集合,但不添加任何内容.它们完全一样.我在这里错过了什么吗?

Vit*_*lio 8

设置不允许重复.

这是语义差异,而不是语法差异.


aio*_*obe 6

来自以下文件Collection:

集合表示一组对象,称为其元素.有些集合允许重复元素而其他集合则不允许.有些是订购的,有些是无序的.

来自以下文件Set:

不包含重复元素的集合.更正式地,集包含没有对元件e1e2使得e1.equals(e2),和至多一个null元件.正如其名称所暗示的,该界面模拟数学集抽象.

这应该澄清a Set和a(更通用的接口)之间的区别Collection.


Luk*_*der 5

好问题.我认为明确具有a概念的接口与a Set的概念相比的主要目的Collection是实际上正式区分概念.假设您正在编写方法

void x(Collection<?> c);
Run Code Online (Sandbox Code Playgroud)

你不会对你想要得到什么参数有同样的想法,就像你在写作一样

void x(Set<?> s);
Run Code Online (Sandbox Code Playgroud)

第二种方法期望Collections最多包含一次元素(即Sets).这是一个很大的语义差别第一种方法,它并不关心它是否收到Sets,Lists或任何其他类型的Collection

如果你仔细观察,Set方法的Javadoc 也是不同的,明确地显示了在谈论Collection或讨论时发挥作用的不同概念.Set