LinkedHashSet javadoc中的错误?

时间:2011-02-03 01:32:24

标签: java collections set javadoc linkedhashset

也许我很挑剔,但在javadoc中有关于LinkedHashSet实现的以下信息:

  

此实现不同于   HashSet在它维护一个   双向链表贯穿   所有条目。

我在LinkedHashSet类中找不到任何双链表。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

双向链表在实施方面,不一定暴露给你获取和使用。

它保留了双向链表,以便它可以跟踪您的项目插入集合的顺序(以及访问access-order LinkedHashMaps中元素的顺序)。常规HashSet不需要双向链表,因为它不保证其内容的顺序。

他们可能在javadoc中包含了这一点,所以你知道他们是如何做到的,并且使用LinkedHashSet而不是普通的HashSet在幕后进行更多的操作。

您可以查看Google Code Search处的源代码(您会注意到LinkedHashSet实际上只是围绕LinkedHashMap,但这不是一个非常重要的细节。)

最后,这不是javadoc中的错误,你不应该担心在LinkedHashSet和LinkedHashMap中有一个双向链表。我们可以快乐地利用LinkedHashMap维护插入顺序,不用担心幕后发生的事情。

答案 1 :(得分:4)

是的,当你在没有向下钻取的情况下查看源时,它有点不稳定。请注意,它调用了包受保护的HashSet构造函数,该构造函数接受一个名为dummy的无意义布尔值:

public LinkedHashSet(int initialCapacity, float loadFactor) {
    super(initialCapacity, loadFactor, true);
}

然后使用LinkedHashMap代替HashMap来支持该集合。实际上,LinkedHashSet实际上是在HashSet中,它只是受到包保护,所以你必须使用LinkedHashSet来实现它。