确认Java LinkedList“foreach”循环

前端之家收集整理的这篇文章主要介绍了确认Java LinkedList“foreach”循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
美好的一天,

有人可以确认java – iterating a linked list帖子底部内容
帖子提到你可以使用for(char c:linkedlistofchars)语法,它仍然是O(n).我想要访问一个看起来像这样的列表……

a b c d e f

实际上在for循环的每次迭代期间都会在链表的开始处运行,就像这样……

a ab abc abcde abcdef

导致访问时间不是O(n).

这究竟是如何工作的?它对数组和数组运算符有意义,但java语法如何知道如何使用java中的foreach循环遍历链表?

我认为LinkedList数据结构只是一个额外的库,而不是核心语言语法的一部分. (我确实知道LinkedList类在java中是标准的)

我希望我能够清楚地解释我的担忧….谢谢

解决方法

首先,任何实现Iterable的类的实例都可以在foreach循环中使用.原因是在编译之后,for(套装:套装)实际上变成了(Iterator i = suit.iterator(); i.hasNext();).有关详细信息,请参见 this explanation.

集合实现了特定于数据结构的优化迭代器.具体到LinkedList,迭代器保持指向最后返回对象的指针,以允许常量时间next()和prevIoUs()操作.因此,使用foreach-loop迭代链表将导致O(n)时间复杂度.您可以查看源代码获取更多详细信息.

猜你在找的Java相关文章