java - 迭代链表

时间:2011-01-22 11:44:16

标签: java linked-list

如果我在java中的链表上使用for-each循环, 是否保证我将按顺序迭代元素 它们出现在列表中?

6 个答案:

答案 0 :(得分:39)

我找到了5种主要方法来迭代Java中的链表(包括Java 8方式):

  1. For Loop
  2. 增强型循环
  3. While循环
  4. 迭代
  5. Collections的stream()util(Java8)
  6. For循环

    LinkedList<String> linkedList = new LinkedList<>();
    System.out.println("==> For Loop Example.");
    for (int i = 0; i < linkedList.size(); i++) {
        System.out.println(linkedList.get(i));
    }
    

    针对循环进行了增强

    for (String temp : linkedList) {
        System.out.println(temp);
    }
    

    while循环

    int i = 0;
    while (i < linkedList.size()) {
        System.out.println(linkedList.get(i));
        i++;
    }
    

    迭代器

    Iterator<String> iterator = linkedList.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next()); 
    }
    

    集合流()util(Java 8)

    linkedList.forEach((temp) -> {
        System.out.println(temp);
    });
    

    有一点需要指出的是, For Loop While Loop 的运行时间为O(n平方),因为get(i)操作需要O( n)时间(see this for details)。其他3种方式需要线性时间并且表现更好。

答案 1 :(得分:13)

保证链接列表按顺序执行。

来自documentation

  

有序集合(也称为   序列)。此界面的用户   精确控制在哪里   列表中插入了每个元素。该   用户可以通过他们访问元素   整数索引(列表中的位置),   并搜索列表中的元素。

iterator() 以适当的顺序返回此列表中元素的迭代器。

答案 2 :(得分:7)

正如Linkedlist的定义所说,它是一个序列,您可以保证按顺序获取元素。

例如:

import java.util.LinkedList;

public class ForEachDemonstrater {
  public static void main(String args[]) {
    LinkedList<Character> pl = new LinkedList<Character>();
    pl.add('j');
    pl.add('a');
    pl.add('v');
    pl.add('a');
    for (char s : pl)
      System.out.print(s+"->");
  }
}

答案 3 :(得分:2)

链接列表不能保证顺序。

请勿使用 linkedList.get(i),尤其是在顺序循环中,因为它违反了拥有链接列表的目的,并且代码效率低下。

使用 ListIterator

    ListIterator<Object> iterator = wordTokensListJava.listIterator();
    while( iterator.hasNext()) {
        System.out.println(iterator.next());
    }

答案 4 :(得分:0)

每个java.util.List实现都需要保留顺序,因此要么使用ArrayList,LinkedList,Vector等,每个都是有序集合,每个集合都保留了插入顺序(参见http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html })

答案 5 :(得分:0)

iterate LinkedList by using iterator

LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add(“Mumbai”);
linkedList.add(“Delhi”);
linkedList.add(“Noida”);
linkedList.add(“Gao”);
linkedList.add(“Patna”);

Iterator<String>  itr = linkedList.iterator();
 while (itr.hasNext()) {
 System.out.println(“Element is =”+itr.next());

 }

参考:Java Linkedlist Examples