想象一下,我们知道列表的大小,并希望只浏览其中的每个第五个元素。我想如果我使用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
用于此目的?
答案 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是通过指针实现的。意味着每个元素都指向下一个元素,依此类推。 所以在这种情况下你不能跳过元素到达第五个。你必须先到第一个引导你到第二个引导你到第三个,依此类推。
现在决定使用哪种数据结构。