【发布时间】:2017-10-09 06:22:22
【问题描述】:
List接口提供了四种定位(索引)方法 访问列表元素。列表(如 Java 数组)是从零开始的。笔记 这些操作可以按与索引成比例的时间执行 某些实现的值(例如 LinkedList 类)。 因此,迭代列表中的元素通常比 如果调用者不知道实现,则通过它进行索引。
这是什么意思?这是否意味着我应该更喜欢
ListIterator<Integer> iterator = list.listIterator(0);
iterator.next()
iterator.next()
结束
list.get(1)
如果是这样,为什么?如果底层列表实现是普通数组,get 将在恒定时间内执行。但是使用迭代器是O(n)。我在这里错过了什么?
他们的意思是我应该使用list.listIterator(1); 而不是list.get(1)?
【问题讨论】:
-
我认为,文档说迭代比随机访问更好,以防您需要遍历列表的所有或几乎所有元素。如果您只需要获取第 n 个元素 - 最好调用 get()。
-
如果
List是'LinkedList,会发生什么?list.get(n)需要遍历它之前的元素。循环变为O(n^2) -
@greg 完全正确。这里的关键词是“通过它建立索引”;换句话说,通过索引访问列表的所有成员。