使用Java中的步骤迭代链接列表

时间:2012-07-24 10:41:42

标签: java iterator

想象一下,我们知道列表的大小,并希望只浏览其中的每个第五个元素。我想如果我使用ArrayList执行此操作,如下所示:

List<Item> l = new ArrayList<Item>();
for (int i = 0; i < l.size(); ) {
    Item item = l.get(i);
    i += 5;
}

每当我调用i这是愚蠢的时候,它会间接遍历列表中的每个元素,直到l.get(i)。有没有办法只访问每五个元素?也许LinkedList?能否请您举例说明如何将ListIterator用于此目的?

2 个答案:

答案 0 :(得分:3)

  

每次调用l.get(i)

时,它会间接遍历列表中的每个元素。

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

  

size,isEmpty,get,set,iterator和listIterator操作以恒定时间运行。


相反,如果您使用LinkedList,它将遍历每个元素,效率会降低,如in the LinkedList javadoc所述:

  

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

答案 1 :(得分:1)

it will indirectly iterate through every element of the list up to i each time I call l.get(i)

好吧,正如我们所知,ArrayList在其实现中由数组支持,因此它的行为与数组相同。因此,如果有的话,我们会get(i) ..直接转到该索引并获取数据。

Maybe LinkedList? Could you please give me an example on how to use the ListIterator for that purpose?

如果您经历过计算机科学中的数据结构,我们知道LinkedList是通过指针实现的。意味着每个元素都指向下一个元素,依此类推。 所以在这种情况下你不能跳过元素到达第五个。你必须先到第一个引导你到第二个引导你到第三个,依此类推。

现在决定使用哪种数据结构。