0

想象一下,我们知道列表的大小,并且只想遍历其中的每五个元素。我想如果我这样做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这个目的的例子吗?

4

2 回答 2

3

每次我调用 l.get(i) 时,它将间接遍历列表中的每个元素,直到 i

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

size、isEmpty、get、set、iterator 和 listIterator 操作在恒定时间内运行。


相反,如果您使用 a LinkedList,它将遍历每个元素并且效率会降低,如LinkedList javadoc 中所述

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

于 2012-07-24T10:44:38.763 回答
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 是通过指针实现的。表示每个元素都指向下一个元素,依此类推。所以在这种情况下,你不能跳过元素到达第五个。你必须去第一个引导你到第二个引导你到第三个等等。

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

于 2012-07-24T11:52:03.833 回答