Java 为什么LinkedHashSet上的迭代时间不依赖于其容量?

Java 为什么LinkedHashSet上的迭代时间不依赖于其容量?,java,collections,linkedhashset,Java,Collections,Linkedhashset,课堂上: 在LinkedHashSet上的迭代需要与大小成比例的时间 无论其容量如何,都是集合的一部分。哈希集上的迭代是 可能更昂贵,需要与成本成比例的时间 容量 我的问题是为什么LHS上的迭代时间对集合的容量没有影响 因为LinkedHashSet在内部包括LinkedList和Set。迭代时,您迭代的是(我相信是双)LinkedList,而不是HashSet。因为LinkedHashSet在内部包括LinkedList和一个集合。迭代时,您迭代的是(我相信是双)链接列表,而不是哈希集。创建一

课堂上:

在LinkedHashSet上的迭代需要与大小成比例的时间 无论其容量如何,都是集合的一部分。哈希集上的迭代是 可能更昂贵,需要与成本成比例的时间 容量


我的问题是为什么LHS上的迭代时间对集合的容量没有影响

因为LinkedHashSet在内部包括LinkedList和Set。迭代时,您迭代的是(我相信是双)LinkedList,而不是HashSet。

因为LinkedHashSet在内部包括LinkedList和一个集合。迭代时,您迭代的是(我相信是双)链接列表,而不是哈希集。

创建一个容量为1MB的常规哈希集(新哈希集(1024*1024),添加1个元素并尝试迭代。虽然哈希集只有1个元素,但迭代器必须遍历基础hastable的所有1MB存储桶。但如果是LinkedHasSet,迭代器将不会遍历哈希表(该哈希表仅用于get()和contains()),而是遍历LinkedList(并行结构)其中只有一个元素。

创建一个容量为1MB的常规哈希集(新哈希集(1024*1024),添加1个元素并尝试迭代。虽然哈希集只有1个元素,但迭代器必须遍历基础hastable的所有1MB存储桶。但如果它是LinkedHashSet,迭代器不会遍历哈希表(其中一个仅用于get()和contains()),但将通过LinkedList(并行结构),其中只有一个元素。

迭代所需的哈希集(基本上)迭代包含元素的bucket,然后消除空值,这需要额外的时间


链接集合的本质是每个元素都指向下一个元素。因此,从第一个元素开始,无需太多问题就可以拉动下一个元素,依此类推-这样可以轻松地对所有元素进行迭代。

迭代所需的哈希集(基本上)迭代包含元素的bucket,然后消除空值,这需要额外的时间

链接集合的本质是,每个元素都指向下一个元素。因此,从第一个元素开始,无需太多问题就可以拉动下一个元素,依此类推-这样可以轻松地迭代所有元素