「java定义队列」java如何实现队列

博主:adminadmin 2023-03-17 01:57:07 264

本篇文章给大家谈谈java定义队列,以及java如何实现队列对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用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队列?

import java.util.*;

public class MyQueueT {

private LinkedListT list = new LinkedListT();

public void addLast(T v) {

list.addLast(v); //队尾插入

}

public T getFirst() {

return list.getFirst(); //取得队受元素

}

public void remove() {

list.removeFirst(); //移除队首元素

}

//类似功能自己扩展下

public static void main(String[] args) {

MyQueueString mq = new MyQueueString();

mq.addLast("hello world");

mq.addLast("hello world2");

System.out.println(mq.getFirst());

mq.remove();

System.out.println(mq.getFirst());

}

}

java中创建队列Queue的问题

因为queue是接口,不能new 接口,应该new接口实现类,你看jdk文档,搜索queue,如图:

看见下面有一大堆实现queue的类,选一个就行,针对队列的,你可以选LinkedBlockingQueue,AbstrctQueue,ArrayDeque

Java ! 帮我定义一个优先队列(priority queue)

PriorityQueueString queue= new PriorityQueueString();

//定义优先队列,此处用了泛型.下面是添加元素:

queue.add("1");

queue.add("2");

queue.add("3");

java编程:定义一个表示队列的泛型类Queue,分别对String对象和Integer对象执行入队列和出队列操作。

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

public class QueueT{

private static LinkedList q;

private T t;

private T getT(T t){

return t;

}

public void setT(T t){

this.t=t;

}

public Queue(T t){

this.t=t;

}

private void offer(){

if(q!=null){

q.offer(t);

}

else{

q=new LinkedList();

q.offer(t);

}

}

public List poll(){

List list=null;

while(q!=nullq.size()0){

list=new ArrayList();

list.add(q.poll());

}

return list;

}public static void main(String []args){

QueueIntegerq=new QueueInteger(1);

q.offer();

List list=q.poll();

System.out.println("出队列的元素为:"+list.get(0));

QueueStringqq=new QueueString("1");

q.offer();

List list2=q.poll();

System.out.println("出队列的元素为:"+list2.get(0));

}

// TODO Auto-generated method stub

}

关于java定义队列和java如何实现队列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。