「java队列先进先出」队列的先进先出
今天给各位分享java队列先进先出的知识,其中也会对队列的先进先出进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
队列先进先出还是先进后出?
队列是先进先出。
这是数据结构里面的知识点,数据结构是一门基础科目;队列形象来说就是排队,你排第一个,自然就是先从你开始,叫作先进先出。
顺序队列中的溢出现象:
1、下溢现象
当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。
2、真上溢现象
当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。
3、假上溢现象
由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。
用java语言设计一个先进先先出的队列类
代码仅供参考,如有问题,欢迎追问!
Basket:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 定义装苹果的篮子
*
* @author stone
* @version 2013-05-21
*/
public class Basket {
// 篮子,能够容纳Integer.MAX_VALUE个苹果
BlockingQueueObject basket = new LinkedBlockingQueueObject(Integer.MAX_VALUE);
// 生产苹果,放入篮子
public void produce(Object obj) throws InterruptedException {
// put方法放入一个苹果,若basket满了,等到basket有位置
basket.put(obj);
}
// 消费苹果,从篮子中取走
public Object consume() throws InterruptedException {
// take方法取出一个苹果,若basket为空,等到basket有苹果为止(获取并移除此队列的头部)
return basket.take();
}
}
BaksetTest:
import org.apache.log4j.Logger;
public class BaksetTest {
static Logger logger = Logger.getLogger(BaksetTest.class);
static Basket basket = new Basket();
public static void main(String[] args) throws Exception {
try{
Consume con = new Consume(basket);
Thread thread = new Thread(con);
thread.start();
Integer num = 0;
while(true){//循环放入数据到队列
num++;
basket.produce(num);
Thread.sleep(1*1000);
if(num1000000) num =0;
}
} catch( Exception e ){
logger.error("error : ", e);
}
}
}
//消费线程,用来消费队列里堆积数据,此线程为阻塞状态
class Consume implements Runnable {
Logger logger = Logger.getLogger(BaksetTest.class);
Basket basket;
public Consume (Basket basket){
this.basket = basket;
}
@Override
public void run() {
try{
while(true){//等待从队列取出数据
System.out.println("取出:" + basket.consume());
}
} catch ( Exception e ){
logger.error("error : ", e);
}
}
}
java中queue的使用方法?
java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用remove()或poll()所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个Queue实现必须指定其顺序属性。
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
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接口。
Java使用LinkedList来模拟一个队列(先进先出的特性)
import java.util.LinkedList;
public class Demo01 {
private LinkedListObject linkedList;
public Demo01() {
linkedList = new LinkedListObject();
}
public void put(Object object) {
linkedList.add(object);
}
public Object get() {
Object object = null;
if (linkedList.size() != 0) {
object = linkedList.get(0);
linkedList.remove(0);
}
return object;
}
public boolean isEmpty() {
if (linkedList.size() != 0) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
demo01.put("1");
demo01.put("2");
System.out.println(demo01.get());
System.out.println(demo01.get());
System.out.println(demo01.isEmpty());
}
}
结果:
1
2
false
java队列先进先出的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于队列的先进先出、java队列先进先出的信息别忘了在本站进行查找喔。
发布于:2022-12-22,除非注明,否则均为
原创文章,转载请注明出处。