Set中使用了什么算法来避免重复?

时间:2017-11-17 12:21:58

标签: java collections set

我可以知道Set中使用了什么算法来避免重复? 我想知道用于避免重复的算法的名称是什么,如果可能的话,同样的算法实现也是如此。

3 个答案:

答案 0 :(得分:1)

此算法可在此处找到; https://homepages.inf.ed.ac.uk/wadler/gj/doc/java.util.Set.html#add(A)

如果指定的元素尚不存在,则将其添加到此Set(可选操作)。更正式地,如果Set不包含元素e,则将指定的元素o添加到Set中(o == null?e == null:o.equals(e))。如果Set已包含指定的元素,则调用将使Set保持不变(并返回false)。结合对构造函数的限制,这可以确保Sets永远不会包含重复元素。

答案 1 :(得分:0)

这取决于Set实现。 Set只是一个定义实现类的方法和一般行为的接口。这些类如何确保条目的唯一性取决于这些类的实现,并且可能完全不同。

某些实现可以使用排序列表通过二进制搜索快速查找现有条目,其他一些类可能是愚蠢的,只会遍历每个条目以查明条目是否已存在。

答案 2 :(得分:0)

HashSet实现有一个HashMap作为数据。

你可以看到add(E e)将调用map.put(e,DUMMY),其中HashMap实现依赖于obejct hashCode()和equals()方法,因为它的关键单一性,所以任何带有返回的对象都为equals将取代之前的。

这个Set的实现可以在这里看到: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashSet.java