栈
数据项入栈和出栈的时间复杂度都为常数O(1).栈操作所耗的时间不依赖于栈中数据项的个数。
栈只允许访问一个数据项:即最后插入的数据项(后进先出),实现方式是数组。在java中,Stack是Vector的子类,它的几个重要的方法是pop,peek,push。
pop方法
/**
移除栈顶的元素,并返回这个元素。
/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
public synchronized void removeElementAt(int index) {
modCount++;
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = elementCount - index - 1;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j);
}
elementCount--;
elementData[elementCount] = null; /* 把出栈的对应位置的值置为null ,指针下移*/
}
peek()方法
查看栈顶的元素
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
push()方法
添加一个元素到栈顶
public E push(E item) {
addElement(item);
return item;
}
队列
数据项入栈和出栈的时间复杂度都为常数O(1).
通常是先进先出(FIFO),如果是优先级队列,会根据提供的比较器或元素的自然顺序进行排序。不管使用哪种排序,队首的元素都可以通过remove或者poll进行移除。先进先出的队列,所有新的元素会被添加到队尾,其他类型的使用不同的添加规则。实现的队列必须要指定排序的规则。
在不违反容量限制的情况下将指定元素添加到队列,如果添加成功返回true,如果没有足够的空间会抛出IllegalStateException异常。
boolean add(E e);
在不违反容量限制的情况下将指定元素添加到队列,当使用容量限制队列,这种方法要优于add(),添加成功返回true,失败则返回false。
boolean offer(E e);
检索并移除队首元素。如果队列为空,会抛出NoSuchElementException异常。
E remove();
检索并移除队首元素。如果队列为空,返回null。
E poll();
检索但是并不删除队首元素,如果队列为空,抛出NoSuchElementException异常。
E element();
检索但是并不删除队首元素,如果队列为空,返回null。
E peek();