本文目录一览:
JAVA中队列和栈的区别
队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表; 栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。 区别如下:
一、规则不同
- 队列:先进先出(First In First Out)FIFO
- 栈:先进后出(First In Last Out )FILO
二、对插入和删除操作的限定不同
- 队列:只能在表的一端进行插入,并在表的另一端进行删除;
- 栈:只能在表的一端插入和删除。
三、遍历数据速度不同
- 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快;
- 栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。
java中怎么实现队列
public class QueueE {
private Object[] data = null;
private int maxSize; //队列容量
private int front; //队列头,允许删除
private int rear; //队列尾,允许插入
//构造函数
public Queue() {
this(10);
}
public Queue(int initialSize) {
if (initialSize >= 0) {
this.maxSize = initialSize;
data = new Object[initialSize];
front = rear = 0;
} else {
throw new RuntimeException("初始化大小不能小于0:" + initialSize);
}
}
//判空
public boolean empty() {
return rear == front ? true : false;
}
//插入
public boolean add(E e) {
if (rear == maxSize) {
throw new RuntimeException("队列已满,无法插入新的元素!");
} else {
data[rear++] = e;
return true;
}
}
//返回队首元素,但不删除
public E peek() {
if (empty()) {
throw new RuntimeException("空队列异常!");
} else {
return (E) data[front];
}
}
//出队
public E poll() {
if (empty()) {
throw new RuntimeException("空队列异常!");
} else {
E value = (E) data[front]; //保留队列的front端的元素的值
data[front++] = null; //释放队列的front端的元素
return value;
}
}
//队列长度
public int length() {
return rear - front;
}
}
java中queue的使用方法?
java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。 队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用remove()或poll()所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个Queue实现必须指定其顺序属性。
offer
添加一个元素并返回true 如果队列已满,则返回falsepoll
移除并返回队列头部的元素 如果队列为空,则返回nullpeek
返回队列头部的元素 如果队列为空,则返回nullput
添加一个元素 如果队列满,则阻塞take
移除并返回队列头部的元素 如果队列为空,则阻塞element
返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常add
增加一个元素 如果队列已满,则抛出一个IllegalStateException异常remove
移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 注意:poll和peek方法出错时返回null。因此,向队列中插入null值是不合法的。 还有带超时的offer和poll方法重载,例如,下面的调用:
boolean success = q.offer(x, 100, TimeUnit.MILLISECONDS);
尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时时,返回false。同样地,调用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。 阻塞操作有put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue继承了Queue接口。