「java队列先进先出」队列的先进先出

博主:adminadmin 2022-12-22 18:15:07 61

今天给各位分享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队列先进先出的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。