也许我很挑剔,但是在javadoc中有以下关于LinkedHashSet实现的信息:
此实现与HashSet不同的是,它维护一个通过其所有条目运行的双链接列表。
我在LinkedHashSet类中找不到任何双链接列表.有人能帮忙吗?
发布于 2011-02-03 01:40:57
是的,当你在没有钻研的情况下看源的时候,你会觉得有点不舒服。注意,它调用了包保护的HashSet构造函数,该构造函数接受一个无意义的名为杜米的布尔值:
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}然后使用LinkedHashMap而不是HashMap来支持集合。实际上,LinkedHashSet实际上是在HashSet中,它只是一个受保护的包,所以您必须使用LinkedHashSet来获取它。
发布于 2011-02-03 01:34:47
双链接列表在实现端,不一定公开供您获取和使用。
它保持双链接列表,以便跟踪将项插入到集合中的顺序(以及存取顺序LinkedHashMaps中访问元素的顺序)。常规的HashSet不需要双链接列表,因为它不能保证其内容的顺序。
他们可能在javadoc中包含了这个部分,这样您就可以知道他们是如何做到的,并且使用LinkedHashSet在幕后所做的事情要比普通的HashSet多一点。
您可以查看谷歌代码搜索的源代码(您会注意到LinkedHashSet实际上只是包装在LinkedHashMap上,但这并不是一个非常重要的细节)。
最后,这并不是javadocs中的错误,您不应该担心在LinkedHashSet和LinkedHashMap中存在一个双链接列表。我们可以愉快地利用LinkedHashMap维护插入的顺序,不考虑幕后发生的事情。
https://stackoverflow.com/questions/4881868
复制相似问题