Java链表我们用的比较多了。
LinkedList、LinkedHashSet、ListHashMap里面底层都用到了链表,和数组同别的,可以认为是对数组的补充。
因为链表的头节点、尾节点等特性,常常用来排序使用。可以用来实现栈,队列等非线性。
链表由于查询时候要从头到尾遍历,所以查询效率不如数组,但是链表的插入和删除速度更快。我们通常对频繁使用
插入和删除的集合推荐使用LinkedList、LinkedHashSet、ListHashMap
单向链表
双向链表
下面是一种整型类型的链表实体类
public class ListNode { int val; ListNode next; public int getVal() { return val; } public void setVal(int val) { this.val = val; } public ListNode getNext() { return next; } public void setNext(ListNode next) { this.next = next; } @Override public String toString() { return "ListNode{" + "val=" + val + ", next=" + next + '}'; } }
我们认识到链表实体类一般包括自己当前节点的值,第一个为头节点,然后的参数为next,即为下一个节点。
链表通常由一连串节点组成,每个节点包含该节点的数据和指向上一节点或者下一节点的引用
链表很强的术语是头节点,上个节点,下个节点,尾节点。
我们也可以通过平常用LinkedList一些方法来体验链表的应用。Linked增加、删除、查询底层即为链表。
增加: add(E e):在链表后添加一个元素; 通用方法 addFirst(E e):在链表头部插入一个元素; 特有方法 addLast(E e):在链表尾部添加一个元素; 特有方法 push(E e):与addFirst方法一致 offer(E e):在链表尾部插入一个元素 add(int index, E element):在指定位置插入一个元素。 offerFirst(E e):JDK1.6版本之后,在头部添加; 特有方法 offerLast(E e):JDK1.6版本之后,在尾部添加; 特有方法 删除: remove() :移除链表中第一个元素; 通用方法 remove(E e):移除指定元素; 通用方法 removeFirst(E e):删除头,获取元素并删除; 特有方法 removeLast(E e):删除尾; 特有方法 pollFirst():删除头; 特有方法 pollLast():删除尾; 特有方法 pop():和removeFirst方法一致,删除头。 poll():查询并移除第一个元素 特有方法 查: get(int index):按照下标获取元素; 通用方法 getFirst():获取第一个元素; 特有方法 getLast():获取最后一个元素; 特有方法 peek():获取第一个元素,但是不移除; 特有方法 peekFirst():获取第一个元素,但是不移除; peekLast():获取最后一个元素,但是不移除; pollFirst():查询并删除头; 特有方法 pollLast():删除尾; 特有方法 poll():查询并移除第一个元素 特有方法