LinkedList实现类


特点

链表结构实现,查询慢,增删快

主要方法

Modifier and Type Method and Description
boolean add(E e) 将指定的元素追加到此列表的末尾。
void add(int index, E element) 在此列表中的指定位置插入指定的元素。
boolean addAll(Collection<? extends E> c) 按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾。
boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中,从指定的位置开始。
void addFirst(E e) 在该列表开头插入指定的元素。
void addLast(E e) 将指定的元素追加到此列表的末尾。
void clear() 从列表中删除所有元素。
Object clone() 返回此 LinkedList的浅版本。
boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
Iterator descendingIterator() 以相反的顺序返回此deque中的元素的迭代器。
E element() 检索但不删除此列表的头(第一个元素)。
E get(int index) 返回此列表中指定位置的元素。
E getFirst() 返回此列表中的第一个元素。
E getLast() 返回此列表中的最后一个元素。
int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
ListIterator listIterator(int index) 从列表中的指定位置开始,返回此列表中元素的列表迭代器(按适当的顺序)。
boolean offer(E e) 将指定的元素添加为此列表的尾部(最后一个元素)。
boolean offerFirst(E e) 在此列表的前面插入指定的元素。
boolean offerLast(E e) 在该列表的末尾插入指定的元素。
E peek() 检索但不删除此列表的头(第一个元素)。
E peekFirst() 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null
E peekLast() 检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null
E poll() 检索并删除此列表的头(第一个元素)。
E pollFirst() 检索并删除此列表的第一个元素,如果此列表为空,则返回 null
E pollLast() 检索并删除此列表的最后一个元素,如果此列表为空,则返回 null
E pop() 从此列表表示的堆栈中弹出一个元素。
void push(E e) 将元素推送到由此列表表示的堆栈上。
E remove() 检索并删除此列表的头(第一个元素)。
E remove(int index) 删除该列表中指定位置的元素。
boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
E removeFirst() 从此列表中删除并返回第一个元素。
boolean removeFirstOccurrence(Object o) 删除此列表中指定元素的第一个出现(从头到尾遍历列表时)。
E removeLast() 从此列表中删除并返回最后一个元素。
boolean removeLastOccurrence(Object o) 删除此列表中指定元素的最后一次出现(从头到尾遍历列表时)。
E set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
int size() 返回此列表中的元素数。
Spliterator spliterator() 在此列表中的元素上创建
Object[] toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
T[] toArray(T[] a) 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。

其大多数方法和 List 接口相关的方法类似,只演示部分

package 集合;
import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListDemo {
	public static void main(String[] args) {
		LinkedList linkedlist = new LinkedList();  
		linkedlist.add("小米");
		linkedlist.add("苹果");
		linkedlist.add("三星");
		System.out.println(linkedlist);
		System.out.println("----两种添加方式-------");
		linkedlist.addFirst("荣耀");
		linkedlist.addLast("华为");
		System.out.println(linkedlist);
		Iterator norder = linkedlist.descendingIterator();
		System.out.println("------Iterator获得逆序------");
		while(norder.hasNext()) {
			System.out.println(norder.next());
		}
		System.out.println("---------获取元素-------------");
		System.out.println(linkedlist.getFirst());
		System.out.println(linkedlist.getLast());
		System.out.println("在头部添加元素");
		
	}
}

image-20220113210045321

作用 方法
入栈 push(E e)
出栈 poll() / pop() 后者在栈空的时候会抛出异常,前者返回null
查看栈顶 peek() 为空时返回null

由于 Stack 类是继承 Vector 而不是LinikedList;
因此采用 Deque 定义栈,用 LinkedList 实现栈,通过与栈相关的方法来体现其是一个栈

package 集合;
import java.util.Deque;
import java.util.LinkedList;

//栈:后入先出
public class StackDemo {
	public static void main(String[] args) {
		//由于 Stack 类是继承 Vector 而不是LinikedList;
		//因此采用 Deque 定义栈,用  LinkedList 实现栈
		Deque stack = new LinkedList<>();
		Student s1 = new Student("张三", 18);
		Student s2 = new Student("李四", 19);
		Student s3 = new Student("王五", 20);
		//栈添加元素
		stack.push(s1);
		stack.push(s2);
		stack.push(s3);
		System.out.println(stack);
		//查看栈顶元素
		System.out.println(stack.peek());
		//删除栈顶元素
		System.out.println(stack.pop());
		System.out.println(stack);
		//查看栈内元素是否为空
		System.out.println(stack.isEmpty());
	}
}

队列

先入先出

作用 方法
入队 offer(E e)
出队 poll() 为空时返回null
查看队首 peek() 为空时返回null
package 集合;
import java.util.Deque;
import java.util.LinkedList;

public class DequeDemo {
	public static void main(String[] args) {
		Deque queue = new LinkedList<>();
		Student s1 = new Student("张三", 18);
		Student s2 = new Student("李四", 19);
		Student s3 = new Student("王五", 20);
		//添加到队列中
		queue.offer(s1);
		queue.offer(s2);
		queue.offer(s3);
		System.out.println(queue);
		//查看队头元素
		System.out.println(queue.peek());
		//队头出队列
		System.out.println(queue.pop());
		System.out.println(queue);
		//添加到队尾
		queue.offer(new Student("Frank", 21));
		System.out.println(queue);
	}
}