我刚注意到Method Set.iterator()的时间复杂度是不变的。
如果是这样,这意味着当java生成一个集合并向其中添加元素时,该元素已经与游标连接。否则,在调用Set.iterator()时,它必须迭代此集合中的所有元素,这会花费线性时间复杂度。
所以我想知道一个集如何在Java中保存元素,并且当调用Set.iterator()时,一个集如何返回一个迭代器?
谢谢!
答案 0 :(得分:3)
Java中有不同类型的集合。可用的主要两个是HashSet和TreeSet。两者都使用映射来实现它们,HashMap和TreeMap。因此,当您添加项目时,它会通过执行地图查找来检查该项目是否已经存在,这对于HashMap来说是接近恒定的时间,而TreeMap是日志时间。
添加到集合不是常量时间,它取决于支持映射,但通常HashMap接近常量时间,TreeMap是日志时间。
要返回迭代器,该集合使用map的键迭代器。支持映射使用set元素作为键。迭代hashmap的键非常简单,只需遍历数组和每个元素的bin。可以使用各种已知的遍历算法来迭代二叉树。