如果ArrayList 底层是数组的话,那么LinkedList,它的底层就是链表

​LinkedList - 图1
链表的存储不是连续的,而是根据上一个数据右侧的节点与下一个数据左侧的节点进行连接存储

扩展API


​LinkedList - 图2

LinkedList不支持快速随机访问,如果要访问LinkedList中第n个元素,必须从头开始查找,然后跳过前面的n-1个元素。并且,虽然LinkedList也提供了一个get()方法,可以根据指定的索引来获取对应的元素,但是正因为它不支持快速随机访问,所以效率比较低下。

常用API


  1. import java.util.Iterator;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. /**
  5. * 链表列表
  6. * @author Administrator
  7. *
  8. */
  9. public class LinkedListStudy {
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12. LinkedList<String> data = new LinkedList<String>();
  13. data.add("a");
  14. data.add("b");
  15. data.add("c");
  16. data.add("d");
  17. data.add("e");
  18. data.add(null);
  19. //返回集合中元素的个数
  20. System.out.println(data.size());
  21. //获得最初,以及最后的一个元素
  22. System.out.println(data.getFirst());
  23. System.out.println(data.getLast());
  24. //根据下标返回元素(但是它需要先从第一个元素开始查找)
  25. System.out.println(data.get(3));
  26. //向第1个元素前,进行添加内容
  27. data.addFirst("a");
  28. //向最后一个元素,进行添加内容
  29. data.addLast("f");
  30. //遍历,如同Arraylist一样(for foreach 迭代器)
  31. Iterator<String> iterator = data.iterator();
  32. //由于JDK1.5以后,LinkedList采用了Queue的数据结构,所以遍历时,它从First开始遍历
  33. while(iterator.hasNext()) {
  34. String str = iterator.next();
  35. System.out.println(str);
  36. iterator.remove();
  37. }
  38. //也可以单个单个的移除
  39. data.remove("f");
  40. }
  41. }