LinkedList(链式结构)

序列分先进先出FIFO,先进后出FILO 
FIFO在Java中又叫Queue 队列 
FILO在Java中又叫Stack 栈

  • LinkedList 与 List接口
    与ArrayList一样,LinkedList也实现了List接口,诸如add,remove,contains等等方法。 详细使用,请参考 ArrayList 常用方法,在此不作赘述。

    接下来要讲的是LinkedList的一些特别的地方

  • 双向链表 - Deque
    除了实现了List接口外,LinkedList还实现了双向链表结构Deque,可以很方便的在头尾插入删除数据


    什么是链表结构: 与数组结构相比较,数组结构,就好像是电影院,每个位置都有标示,每个位置之间的间隔都是一样的。 而链表就相当于佛珠,每个珠子,只连接前一个和后一个,不用关心除此之外的其他佛珠在哪里。

    package collection;
     
    import java.util.LinkedList;
     
    import charactor.Hero;
     
    public class TestCollection {
     
        public static void main(String[] args) {
             
            //LinkedList是一个双向链表结构的list
            LinkedList<Hero> ll =new LinkedList<Hero>();
             
            //所以可以很方便的在头部和尾部插入数据
            //在最后插入新的英雄
            ll.addLast(new Hero("hero1"));
            ll.addLast(new Hero("hero2"));
            ll.addLast(new Hero("hero3"));
            System.out.println(ll);
             
            //在最前面插入新的英雄
            ll.addFirst(new Hero("heroX"));
            System.out.println(ll);
             
            //查看最前面的英雄
            System.out.println(ll.getFirst());
            //查看最后面的英雄
            System.out.println(ll.getLast());
             
            //查看不会导致英雄被删除
            System.out.println(ll);
            //取出最前面的英雄
            System.out.println(ll.removeFirst());
             
            //取出最后面的英雄
            System.out.println(ll.removeLast());
             
            //查看会导致英雄被删除
            System.out.println(ll);
             
        }
          
    }
  • 队列 - Queue
    LinkedList 除了实现了List和Deque外,还实现了Queue接口(队列)。
    Queue是先进先出队列 FIFO,常用方法:
    offer 在最后添加元素
    poll 取出第一个元素
    peek 查看第一个元素

    package collection;
      
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
      
    import charactor.Hero;
      
    public class TestCollection {
      
        public static void main(String[] args) {
            //和ArrayList一样,LinkedList也实现了List接口
            List ll =new LinkedList<Hero>();
              
            //所不同的是LinkedList还实现了Deque,进而又实现了Queue这个接口
            //Queue代表FIFO 先进先出的队列
            Queue<Hero> q= new LinkedList<Hero>();
              
            //加在队列的最后面
            System.out.print("初始化队列:\t");
            q.offer(new Hero("Hero1"));
            q.offer(new Hero("Hero2"));
            q.offer(new Hero("Hero3"));
            q.offer(new Hero("Hero4"));
              
            System.out.println(q);
            System.out.print("把第一个元素取poll()出来:\t");
            //取出第一个Hero,FIFO 先进先出
            Hero h = q.poll();
            System.out.println(h);
            System.out.print("取出第一个元素之后的队列:\t");
            System.out.println(q);
              
            //把第一个拿出来看一看,但是不取出来
            h=q.peek();
            System.out.print("查看peek()第一个元素:\t");
            System.out.println(h);
            System.out.print("查看并不会导致第一个元素被取出来:\t");
            System.out.println(q);
              
        }
           
    }
  • ArrayList 与 LinkedList的区别
    ArrayList 与 LinkedList的区别是面试常常会问到的考题

    ArrayList 插入,删除数据慢
    LinkedList, 插入,删除数据快
    ArrayList是顺序结构,所以定位很快,指哪找哪。 就像电影院位置一样,有了电影票,一下就找到位置了。
    LinkedList 是链表结构,就像手里的一串佛珠,要找出第99个佛珠,必须得一个一个的数过去,所以定位慢




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值