ArrayDeque利用数组建造的双向队列

来源:互联网 发布:nba2k17麦迪身体数据 编辑:程序博客网 时间:2024/06/05 09:54
看到java.util.ArrayDeque的源码,其中主要方法有addFirst(E e),addLast(E e),offerFirst(E e),offerLast(E e),对于addFirst(E e)方法如下:
public void addFirst(E e) {        if (e == null)            throw new NullPointerException();        elements[head = (head - 1) & (elements.length - 1)] = e;        if (head == tail)            doubleCapacity();    }
一般自己实现的话,不会想到head = (head-1)&(elements.length-1)这种方式,一般会采用 head=(head-1+elements.length)%elements.length;来计算头部增加元素的下标,但是自己的这种方式,没有很好利用elements.length值为2^n这个条件,从而造成效率上的略微损失。两个表达式在这个条件下是等价的,但前者采用位操作,效率更高。
0 0
原创粉丝点击