LinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:

  1. 分配内存空间不是必须是连续的;
  2. 插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);
  3. 访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);

在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:

add

boolean add(E e):在链表后添加一个元素,如果成功,返回true,否则返回false;
void addFirst(E e):在链表头部插入一个元素;
void addLast(E e):在链表尾部添加一个元素;
void add(int index, E element):在指定位置插入一个元素。

remove

E remove():移除链表中第一个元素;
boolean remove(Object o):移除链表中指定的元素;
E remove(int index):移除链表中指定位置的元素;
E removeFirst():移除链表中第一个元素,与remove类似;
E removeLast():移除链表中最后一个元素;
boolean removeFirstOccurrence(Object o):移除链表中第一次出现所在位置的元素;
boolean removeLastOccurrence(Object o):移除链表中最后一次出现所在位置的元素;

get

E get(int index):按照下边获取元素;
E getFirst():获取第一个元素;
E getLast():获取第二个元素;

peek

E peek():获取第一个元素,但是不移除;
E peekFirst():获取第一个元素,但是不移除;
E peekLast():获取最后一个元素,但是不移除;
注意:如果没找到对应的元素,统统输出null:

offer

boolean offer(E e):在链表尾部插入一个元素;
boolean offerFirst(E e):与addFirst一样,实际上它就是addFirst;
boolean offerLast(E e):与addLast一样,实际上它就是addLast;

其他

void push(E e):与addFirst一样,实际上它就是addFirst;
E pop():与removeFirst一样,实际上它就是removeFirst,如果长度为空则产生NoSuchElementException异常;
E poll():查询并移除第一个元素,如果长度为空则返回null;
E set(int index, E e):设置指定位置;
boolean contains(E e):查看是否包含指定元素;
E element():等同getFirst;
List subList(int fromIndex, int toIndex):截取子串,不改变原linkedList

实现栈

从以上API中可以发现,实现一个栈是没有问题的,栈的基础方法有:压入,弹出,查看栈顶,对应addLast、removeLast、peekLast方法实现。

示例代码

断点查看每步之后的变化

  1. package net.gaox.fileserver.util;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. /**
  5. * <p> </p>
  6. *
  7. * @author gaox·Eric
  8. * @date 2019/8/4 21:01
  9. */
  10. public class LinkedListExplore {
  11. public static void main(String[] args) {
  12. LinkedList<String> linked = new LinkedList<>();
  13. // 添加add
  14. linked.add("二");
  15. linked.addFirst("一");
  16. linked.addLast("三");
  17. linked.add(3, "四");
  18. linked.add("六");
  19. linked.add("七");
  20. linked.add("八");
  21. linked.add("九");
  22. linked.add("十");
  23. //移除,并返回该元素
  24. //删除第一个
  25. String remove = linked.remove();
  26. linked.removeFirst();
  27. //移除最后一个
  28. linked.removeLast();
  29. //移除index=2
  30. linked.remove(2);
  31. //移除,并返回成功状态
  32. boolean removeObject = linked.remove("3");
  33. linked.removeFirstOccurrence("1");
  34. linked.removeLastOccurrence("9");
  35. //获取
  36. String getIndex = linked.get(3);
  37. linked.getFirst();
  38. linked.getLast();
  39. //等同addFirst
  40. linked.push("十一");
  41. //等同removeFirst
  42. linked.pop();
  43. //查询并移除第一个元素,如果长度为空则返回null
  44. linked.poll();
  45. String peek = linked.peek();
  46. linked.peekFirst();
  47. linked.peekLast();
  48. linked.offer("十二");
  49. linked.offerFirst("零");
  50. linked.offerLast("十三");
  51. linked.set(6, "七");
  52. linked.contains("一");
  53. //等同getFirst
  54. linked.element();
  55. //截取子串,不改变原linkedList
  56. List<String> subList = linked.subList(2, 7);
  57. }
  58. }