为什么HashSet的属性不允许重复?

Why Are No Duplicates Allowed An Attribute Of HashSet?

HashSet 的一个众所周知的特点是它不允许重复。例如:

HashSet<Integer> h = new HashSet<>();
h.add(5);
h.add(5); // this time it won't allow it, because its a duplicate.

可是,为什么会这样呢?拥有一个在最佳情况下添加 O(1) 并在最佳情况下搜索 O(1) 的数据结构似乎很有用,如果我有重复项,它仍然有用。 Java 实现 HashSet 的方式不允许它有重复项,还是只是出于某种原因的选择?

因为它是 Set 的众所周知的属性,所以链接的 JavaDoc 的第一行显示为

A collection that contains no duplicate elements.

因此 HashSet and TreeSet(以及所有其他正确实施的 Set(s))不允许重复。