第一次写文章,这是我看java源代码自己模仿写的ArrayDeque,就当做对自己的一次复习吧,希望对你们有所帮助,代码有什么错的地方
还请见谅 代码如下
public class MyArrayDeque<E> {
private Object[] elements;
private int head;//头部下标 始终未0;
private int tail=-1;//尾部下标(集合最后一个值的下标);
private int size;
public MyArrayDeque() {
elements =new Object[16];
}
public boolean add(E e) {
addLast(e);
return true;
}
public void addLast(E e) {
if(e==null)
throw new NoSuchElementException();
group(size+1);
elements[++tail] =e;
size++;
}
public void addFirst(E e) {
if(e ==null)
throw new NoSuchElementException();
group(size+1);
System.arraycopy(elements, head, elements, head+1, size);
elements[head]=e;
size++;
tail++;
}
private void group(int size) {
if(size>16) {
DoubleGroup();
}
}
private void DoubleGroup() {
size =size*2;
elements =Arrays.copyOf(elements, size);
}
public E getFirst() {
E e =(E)elements[head];
if(e==null)
throw new NoSuchElementException();
return e;
}
public E getLast() {
E e =(E)elements[tail];
if(e==null)
throw new NoSuchElementException();
return e;
}
public E peek() {
return peekFirst();
}
public E peekFirst() {
return (E)elements[head];
}
public E peekLast() {
return (E)elements[tail];
}
public E poll() {
return pollFirst();
}
public E pollFirst() {
if(elements[head]==null)
return null;
E e =(E)elements[head];
System.arraycopy(elements, head+1, elements, 0, size-1);
elements[tail--] =null;
size--;
return e;
}
public E pollLast() {
if(elements[tail]==null)
return null;
E e =(E)elements[tail];
elements[tail--] =null;
size--;
return e;
}
public boolean offer(E e) {
offerLast(e);
return true;
}
public boolean offerFirst(E e) {
addFirst(e);
return true;
}
public boolean offerLast(E e) {
addLast(e);
return true;
}
public E remove(E e) {
return removeFirst(e);
}
public E removeFirst(E e) {
E x =pollFirst();
if(x==null)
throw new NoSuchElementException();
return x;
}
public E removeLast(E e) {
E x =pollLast();
if(x==null)
throw new NoSuchElementException();
return x;
}
}
/*ArrayDeque中常用方法
* add() 在集合后面添加值 底层调用addLast()方法
* addFirst(Object) 在集合最前面添加值
* addLast(Object) 在集合最后面添加值
* addAll(Collection) 添加传入集合的值
*
* clear() 清空集合
* contains(Object) 判断集合中是否有传入对象
*
* getFirst() 得到集合中最前面的值 没有值抛出NoSuchElementException
* getLast() 得到集合中最后面的值 没有值抛出NoSuchElementException
*
* peek() 得到这个集合第一个值 底层调用peekFirst();不删除 值 没有值返回空 不会抛出异常
* peekFirst() 得到这个集合第一个值 不删除值 没有值返回空 不会抛出异常
* peekLast() 得到这个集合最后一个值 不删除值 没有返回空 部抛出异常
*
* poll() 得到这个集合第一个值 底层调用pookFirst();并删除 值 没有值返回空 不会抛出异常
* pollFirst() 得到这个集合第一个值 并删除值 没有值返回空 不会抛出异常
* pollLast() 得到这个集合最后一个值 并删除值 没有返回空 部抛出异常
*
* push() 在集合最前面添加值 底层调用 addFirst();
*
* offer()在集合最后面添加值 底层调用offerLast();
* offerFirst()在集合前面添加值 底层调用addFirst();
* offerLast() 在集合最后面添加值 底层调用addLast();
*
* remove() 返回并删除集合最前面的值 底层调用removeFirst()
* removeFirst() 返回并删除集合最前面的值底层调用pollFirst()删除第一个值 然后判断是否为空 为空抛出NoSuchElementException
* reoiveLast() 返回并删除集合最后面的值 底层调用pollLast()删除最后一个值 然后判断是否为空 为空抛出NoSuchElementException
* removeFirstOccurrencte() 返回当你调用removeFirst()时是否能正确执行的boolean类型
* removeLasttOccurrencte() 返回当你调用removeLast()时是否能正确执行的boolean类型
* */
感谢观看