Java链表数据结构分析

106 阅读2分钟

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():查询并移除第一个元素     特有方法

文章知识点与官方知识档案匹配,可进一步学习相关知识

本文使用 文章同步助手 同步