就内存而言,打印链表的有效方法

时间:2017-08-08 07:36:39

标签: java linked-list

我们可以用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));
        }
    }
}

2 个答案:

答案 0 :(得分:1)

使用Iterator打印更有效率(因为它只在链表上迭代一次,其中每个linkedList.get(i)需要对列表进行部分迭代),即使它需要更多内存(对于Iterator)的分配。我不会为Iterator选择for循环,只是为了保存一个实例分配。

就空间复杂性而言,两种方式都需要O(1)空间。

因此,您应该更喜欢具有更好时间复杂度的方法 - 使用Iterator打印需要O(n)时间,而for循环需要O(n^2)时间。

答案 1 :(得分:0)

不仅仅是为了内存问题而且为了避免索引问题,你可以找到比循环更好的迭代器。请查看更多信息here