java_列表与队列

1. ArrayList

随机访问效率很高,但插入和删除性能比较低

1.1 特点

在这里插入图片描述

2. LinkedList

LinkedList同样实现了List接口,它的特点与ArrayList正好相反。同时还实现了Deque和Queue接口。可以按照队列、栈和双端队列的方式进行操作。

2.1 用法

2.1.1 创建方式

List<String> list = new LinkedList<> ();
List<String> list1 = new LinkedList<> (Arrays.asList (new String []{"a","b","c"}));

2.1.2 Queue接口定义

   public interface Queue<E> extends Collection<E>{
        boolean add(E e);//在尾部添加元素,队列满时抛异常
        boolean offer(E e);//在尾部添加元素,队列满时返回false
        E remove();//删除头部元素,队列空时抛异常
        E poll();//删除头部元素,队列空时返回null
        E element();//查看头部元素,队列空时抛异常
        E peek();//查看头部元素,队列空时返回null
    }

2.1.3 Queue举例

    Queue<String> queue = new LinkedList<> ();
    queue.offer("a");
    queue.offer("b");
    queue.offer("c");
    while(queue.peek()!=null){
        System.out.println (queue.poll ());
    }

        Queue<Integer> q = new LinkedList<>();

        for (int i=0;i<5;i++){
            q.offer(i);
        }
        while (!q.isEmpty()) System.out.println(q.poll());
    }

2.1.4 Deque举例

    Deque<String> stack = new LinkedList<> ();
    stack.offer("a");
    stack.offer("b");
    stack.offer("c");
    while(stack.peek()!=null){
        System.out.println (stack.pop ());
    }

2.2 特点

tedian

3. ArrayDeque

在这里插入图片描述

3.1 实例变量

private transient E[] elements;
private transient int head;
private transient int tail;

3.2 原理

ArrayDeque的高效来源于head和tail这两个变量。

3.2.1 循环数组

对于一般的数组,比如arr ,第一个元素是arr[0],最后一个元素为arr[arr.length-1]。
但是ArrayDeque中的数组,他是一个逻辑上的循环数组,有head和tail这两个变量决定
a.当head=tail,则数组为空,长度为0;
b.当head<tail,则第一个元素为elements[head],最后一个元素为elements[tail-1],长度为tail -head,元素索引从head到tail-1.
c.当tail<head&&tail==0,则第一个元素为elements[head],最后一个为elements[elements.length-1],元素索引从head到elements.length-1.
d.当0<tail<head,则会形成循环,第一个元素是elements[head],最后一个为elements[tail-1],元素索引从head到 elements.length-1,r然后再从0到tail-1.

在这里插入图片描述

3.2.2 构造方法

public ArrayDeque(){
    elements = (E[])new Object[16];
}

分配了一个长度为16的数组。如果有参数numElements,代码为

public ArrayDeque(int numElements){
    allocateElements(numElements);
}
    public ArrayDeque(Collection<? extends E> c ){
        allocteElements(c.size ());
        addAll(c);
    }

3.2.3 头部添加和删除

关键方法

addFirst();
removeFirst();//removeFirst()主要调用了pollFirst()方法

3.3 特点

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值