Java中,所有鏈表實際上都是雙向鏈表的,即每個結點還存放在着指向前驅結點的引用。
LinkedList中的contains方法檢測某個元素是否出現在鏈表中。
LinkedList類提供了一個用來訪問某個特定元素的get方法,但是其效率並不高。
eg:
LinkedList<String> list=new LinkedList<>();
for (int i=0;i<List.size();i++)
list.get(i);
絕對不應該使用這種讓人誤解的隨機訪問方法來遍歷鏈表,每次查找一個元素都要從列表的頭部重新開始搜索,
LinkedList對象根本不做任何緩存位置信息的操作。
故建議:避免使用以整數索引表示鏈表中位置的所有方法。如果需要對集合進行隨機訪問,就是用數組或ArrayList,而不要使用鏈表。
1 import java.util.*; 2 public class LinkedListTest { 3 4 public static void main(String[] args) 5 { 6 List<String> a=new LinkedList<>(); 7 a.add("Amy"); 8 a.add("Carl"); 9 a.add("Erica"); 10 11 List<String> b=new LinkedList<>(); 12 b.add("Bob"); 13 b.add("Doug"); 14 b.add("Frances"); 15 b.add("Gloria"); 16 17 ListIterator<String> aIter=a.listIterator(); 18 Iterator<String> bIter=b.iterator(); 19 20 while (bIter.hasNext()) 21 { 22 if (aIter.hasNext()) aIter.next(); 23 aIter.add(bIter.next()); 24 } 25 System.out.println(a); 26 27 bIter=b.iterator(); 28 while (bIter.hasNext()) 29 { 30 bIter.next(); 31 if (bIter.hasNext()) 32 { 33 bIter.next(); 34 bIter.remove(); 35 } 36 } 37 System.out.println(b); 38 39 a.removeAll(b); 40 41 System.out.println(a); 42 } 43 }