1. 基本概念
- LinkedList 表示的是一个链表的操作类,也是 List 接口的子类。Java 中已经为开发者提供好了一个链表程序,开发者直接使用即可,而不用再重新开发了,LinkedList 类的定义如下:
public class LinkedList<E> extends AbstractSequentialList<E>
implements List<E>,Queue<E>,Cloneable,Serializable
从此类的定义可以发现,此类虽然实现了 List 接口,但也实现了 Queue 接口,Queue 表示的是队列操作接口,采用 FIFO (先进先出)的方式操作。
2. Queue 接口是 Collection 的子接口,此接口定义如:public interface Queue<E> extends Collection<E>
。Queue 接口定义的方法如表:
序号 | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public E elementt() | 普通 | 找到链表的表头 |
2 | public boolean offer(E o) | 普通 | 将指定元素增加到链表的表尾 |
3 | public E peek() | 普通 | 找到但并不删除链表的头 |
4 | public E poll() | 普通 | 找到但并删除此链表的头 |
5 | public E remove() | 普通 | 检索并移除表头 |
3. 在 LinkedList 类中除了实现上表中的方法,还提供了如下表中的几个链表操作方法。
序号 | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public void addFirst(E o) | 普通 | 在链表开头增加元素 |
2 | public void addLast(E o) | 普通 | 在链表结尾增加元素 |
3 | public boolean offer(E o) | 普通 | 将指定元素增加到链表的表尾 |
4 | public E removeFirst() | 普通 | 移除链表的第一个元素 |
5 | public E removeLastt() | 普通 | 移除链表的最后一个元素 |
2.操作实例
2.1 在链表的开头和结尾增加数据
为了达到操作目的,必须直接使用 LinkedList 类,因为 List 接口中没有实现 第一个表中所定义的方法。
实例1代码:
package self.learn.linkedemo;
import java.util.LinkedList;
public class LinkedDemo {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A"); // 向链表中增加数据
link.add("B");
link.add("C");
System.out.println("初始化链表:"+link); // 输出链表内容,调用 toString()
link.addFirst("X"); // 在链表表头增加内容
link.addLast("Y"); // 在链表表尾增加内容
System.out.println("增加头和尾的链表:"+link); // 输出链表内容,调用 toString()
}
}
运行结果截图:
2.2 找到链表头
在 LinkedList 中存在很多种找到链表头的操作,其中最常用的方法介绍如下:
(1)找到表头:public E element()
。
(2)找到不删除表头:public E peek()
。
(3)找到并删除表头:public E poll()
。
实例2代码:
package self.learn.linkedemo;
import java.util.LinkedList;
public class LinkedDemo {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A"); // 向链表中增加数据
link.add("B");
link.add("C");
System.out.println("1-1、element()方法找到表头:"+link.element());
System.out.println("1-2、找完之后的链表内容:"+link);
System.out.println("2-1、peek()方法找到表头:"+link.peek());
System.out.println("2-2、找完之后的链表内容:"+link);
System.out.println("3-1、poll()方法找到表头:"+link.poll());
System.out.println("3-2、找完之后的链表内容:"+link);
}
}
运行结果截图:
2.3 以先进先出的方式取出全部数据
在 LinkedList 类中存在 poll()方法,通过循环此操作,就可以把全部内容取出并且是以先进先出(FIFO)方式。
实例3代码:
package self.learn.linkedemo;
import java.util.LinkedList;
public class LinkedDemo {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A"); // 向链表中增加数据
link.add("B");
link.add("C");
link.add("D");
System.out.print("以先进先出(FIFO)方式输出: ");
for(int i = 0; i < link.size()+1; i++) {
System.out.print(link.poll()+"、");
}
}
}