首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中使用步骤迭代LinkedList

在Java中使用步骤迭代LinkedList
EN

Stack Overflow用户
提问于 2012-07-24 18:41:42
回答 2查看 361关注 0票数 0

假设我们知道列表的大小,并且只想遍历列表中的每五个元素。我认为如果我用ArrayList这样做,就像下面这样:

代码语言:javascript
复制
List<Item> l = new ArrayList<Item>();
for (int i = 0; i < l.size(); ) {
    Item item = l.get(i);
    i += 5;
}

每次我调用l.get(i)时,它都会间接地遍历列表中的每个元素,直到i,这很愚蠢。有没有办法每隔五个元素就访问一次?也许是LinkedList?你能给我举个例子来说明如何使用ListIterator来达到这个目的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-24 18:44:39

每次调用l.get(i)时,它都会间接地遍历列表中的每个元素,直到i为止。

不,不会的。ArrayList中的get(i)是一个O(1)操作,它会直接从后备数组中获取项--不涉及迭代。请参阅ArrayList's javadoc

大小、isEmpty、get、set、迭代器和listIterator操作在固定时间内运行。

相反,如果使用LinkedList,它将遍历每个元素,并且效率较低,正如in the LinkedList javadoc所解释的那样

索引到列表中的

操作将从开头或结尾遍历列表,以更接近指定索引的值为准。

票数 3
EN

Stack Overflow用户

发布于 2012-07-24 19:52:04

代码语言:javascript
复制
it will indirectly iterate through every element of the list up to i each time I call l.get(i)

正如我们所知,ArrayList在其实现中是由数组支持的,所以它的行为与数组相同。因此,如果我们每次都这样做,get(i) ..it就会直接访问该索引并获取数据。

代码语言:javascript
复制
Maybe LinkedList? Could you please give me an example on how to use the ListIterator for that purpose?

如果你了解过计算机科学中的数据结构,我们就知道LinkedList是通过指针实现的。表示每个元素都指向下一个元素,依此类推。所以在这种情况下,你不能通过元素跳转到第五个元素。你必须转到第一个,它会引导你到第二个,它会引导你到第三个,依此类推。

现在由它来决定使用哪些数据结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11629126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档