集合-LinkedList

List linkedlist = new LinkedList<>(); 

  LinkedList 底层数据结构是链表。

 

 1. LinkedList 除了实现了List接口外,还实现了双向链表结构Deque的方法,使得可以在头尾两端插入和删除数据。

 public static void main(String[] args){
       LinkedList<String> ll = new LinkedList<>();

       //在链表尾部添加元素
       ll.addLast("run10");
       ll.addLast("run2");
       ll.addLast("run4");

       //在链表头部添加元素
       ll.addFirst("run1");

       System.out.println(ll);

       //查看最前面的元素
       System.out.println(ll.getFirst());

       //查看最后面的元素
       System.out.println(ll.getLast());

       //取出最前面的元素
       System.out.println(ll.removeFirst());

       //取出最后面的元素
       System.out.println(ll.removeLast());

       System.out.println(ll);

输出结果如下:

[run1, run10, run2, run4]
run1
run4
run1
run4
[run10, run2]

 

2.LinkedList除了实现List和Deque外,还实现了Queue的方法。 Queue是先进先出队列(FIFO),最常用的方法是offer,poll,peek

  注:Queue接口在LinkedList的基础上添加了element(),offer(),peek(),poll(),remove()方法,以便成为Queue的实现:

public void Queuerun(){

       //实现一个队列
       Queue<String> q = new LinkedList<String>();

       //在队列后添加元素
       System.out.println("新建队列:\t");
       q.offer("run1");
       q.offer("run2");
       q.offer("run3");
       q.offer("run4");

       System.out.println(q);

       //取出第一个元素
       String str = q.poll();
       System.out.println("取出第一个元素:");
       System.out.println(str);
       System.out.println("取出第一个元素后的队列:\t");
       System.out.println(q);

       //查看第一个元素
       str = q.peek();
       System.out.println("查看第一个元素:");
       System.out.println(str);
       System.out.println("查看当前队列:\t");
       System.out.println(q);
   }

结果显示如下:

新建队列:    
[run1, run2, run3, run4]
取出第一个元素:
run1
取出第一个元素后的队列:    
[run2, run3, run4]
查看第一个元素:
run2
查看当前队列:    
[run2, run3, run4]

 

3.由于LinkedList有着丰富的插入,删除操作,因此可以实现很多种数据结构,如栈,也成为叠加栈,这是一个后进先出(LIFO)的容器。

LinkedList具有能够直接实现栈的所有功能的方法,用LinkedList实现的栈如下:

public class MyStack<T> {
    private LinkedList<T> storage = new LinkedList<T>();

    //压入栈
    public void push(T v){storage.addFirst(v);}

    //查看栈顶端元素
    public T peek(){return storage.getFirst();}

    //弹出栈顶端元素
    public T pop(){return storage.removeFirst();}

    //是否为空
    public boolean isEmpty(){return storage.isEmpty();}

    //展示栈结构
    public String toString(){return storage.toString();}
}

注:如果你只需要栈的行为,这里就不需要继承LinkedList,因为继承会产生具有LinkedList的其他所有方法的类,而不是一个单纯的栈

posted @ 2019-03-18 12:35  胡叁安  阅读(137)  评论(0编辑  收藏  举报