假设我们知道列表的大小,并且只想遍历列表中的每五个元素。我认为如果我用ArrayList这样做,就像下面这样:
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来达到这个目的吗?
发布于 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所解释的那样
索引到列表中的
操作将从开头或结尾遍历列表,以更接近指定索引的值为准。
发布于 2012-07-24 19:52:04
it will indirectly iterate through every element of the list up to i each time I call l.get(i)正如我们所知,ArrayList在其实现中是由数组支持的,所以它的行为与数组相同。因此,如果我们每次都这样做,get(i) ..it就会直接访问该索引并获取数据。
Maybe LinkedList? Could you please give me an example on how to use the ListIterator for that purpose?如果你了解过计算机科学中的数据结构,我们就知道LinkedList是通过指针实现的。表示每个元素都指向下一个元素,依此类推。所以在这种情况下,你不能通过元素跳转到第五个元素。你必须转到第一个,它会引导你到第二个,它会引导你到第三个,依此类推。
现在由它来决定使用哪些数据结构。
https://stackoverflow.com/questions/11629126
复制相似问题