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 }