我们可以用Iterator和for循环打印链表。就内存分配而言,它有何不同?哪一个更有效?
public class Demo {
public static void main(String[] args) {
LinkedList<String> placesToVisit = new LinkedList<String>();
placesToVisit.add("Sydney");
placesToVisit.add("Melbourne");
placesToVisit.add("Brisbane");
placesToVisit.add("Perth");
printListWithoutFor(placesToVisit);
printListWithFor(placesToVisit);
}
private static void printListWithoutFor(LinkedList<String> linkedList) {
Iterator<String> i = linkedList.iterator();
while (i.hasNext()) {
System.out.println("Now visiting " + i.next());
}
System.out.println("=========================");
}
private static void printListWithFor(LinkedList<String> linkedList){
for (int i=0; i<linkedList.size(); i++){
System.out.println("Now visiting " + linkedList.get(i));
}
}
}
答案 0 :(得分:1)
使用Iterator
打印更有效率(因为它只在链表上迭代一次,其中每个linkedList.get(i)
需要对列表进行部分迭代),即使它需要更多内存(对于Iterator
)的分配。我不会为Iterator
选择for循环,只是为了保存一个实例分配。
就空间复杂性而言,两种方式都需要O(1)
空间。
因此,您应该更喜欢具有更好时间复杂度的方法 - 使用Iterator
打印需要O(n)
时间,而for循环需要O(n^2)
时间。
答案 1 :(得分:0)
不仅仅是为了内存问题而且为了避免索引问题,你可以找到比循环更好的迭代器。请查看更多信息here