集合-LinkedList

博客介绍了LinkedList底层是链表结构,它实现了List、Deque和Queue接口,可在头尾两端插入和删除数据,支持先进先出队列操作。此外,因其丰富的插入、删除操作,还能实现栈这种后进先出的容器。
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的其他所有方法的类,而不是一个单纯的栈

转载于:https://www.cnblogs.com/wqq-blog/p/10551463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值