【发布时间】:2018-05-27 17:03:08
【问题描述】:
我刚刚注意到 Method Set.iterator() 的时间复杂度是恒定的。
如果是,则说明java生成一个set并往其中添加元素时,该元素已经和cursor连接上了。否则,调用 Set.iterator() 时,它必须迭代该集合中的所有元素,这会花费线性时间复杂度。
所以想知道Java中set是如何保存元素的,调用Set.iterator()时,set是如何返回一个迭代器的呢?
谢谢!
【问题讨论】:
-
我不确定您所说的“保存元素”是什么意思。当您在一个集合上进行迭代时,您绝不会向其中添加元素。
-
取决于 Set 实现。 jdk 实现是open source,所以你可以在那里看看——如果你对你找到的东西有特定的问题,那么这些将是这里的主题。上述问题过于宽泛。
-
通常
Set.iterator()方法会为你返回集合中值的包装对象。它只会在您调用其next方法时开始迭代值。 -
@yshavit 我想每个人都知道 Java 是开源的,但在 stackoverflow 中仍然存在大量问题。那是因为没有人能够理解或有时间了解每段源代码是如何实现的。我认为我的问题已经足够具体了。
-
@HanLi 恕我直言,我认为您得到了一个相当模糊的答案(“在某些情况下,它委托给 Map 的迭代器,其实现因 Map 类型而异” ) 说明这个问题太宽泛了。除非这是您正在寻找的特异性水平——在这种情况下,您可能应该接受答案。