「Java构造queue」JAVA构造方法
今天给各位分享Java构造queue的知识,其中也会对JAVA构造方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、queue java 是怎么实现的
- 2、java中的queue类是什么,啥作用?
- 3、java中创建队列Queue的问题
- 4、求大神一个java程序,创建一个queue 的一行数字
- 5、求用Java的LinkedList类创建一个链队列(LinkedQueue)类
queue java 是怎么实现的
java中queue的使用
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。下表显示了jdk1.5中的阻塞队列的操作:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
remove、element、offer 、poll、peek 其实是属于Queue接口。
阻塞队列的操作可以根据它们的响应方式分为以下三类:aad、removee和element操作在你试图为一个已满的队列增加元素或从空队列取得元素时 抛出异常。当然,在多线程程序中,队列在任何时间都可能变成满的或空的,所以你可能想使用offer、poll、peek方法。这些方法在无法完成任务时 只是给出一个出错示而不会抛出异常。
注意: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方法在队列空时阻塞。
java.ulil.concurrent包提供了阻塞队列的4个变种。默认情况下,LinkedBlockingQueue的容量是没有上限的(说的不准确,在不指定时容量为Integer.MAX_VALUE,不要然的话在put时怎么会受阻呢),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。
ArrayBlockingQueue在构造时需要指定容量, 并可以选择是否需要公平性,如果公平参数被设置true,等待时间最长的线程会优先得到处理(其实就是通过将ReentrantLock设置为true来 达到这种公平性的:即等待时间最长的线程会先操作)。通常,公平性会使你在性能上付出代价,只有在的确非常需要的时候再使用它。它是基于数组的阻塞循环队 列,此队列按 FIFO(先进先出)原则对元素进行排序。
PriorityBlockingQueue是一个带优先级的 队列,而不是先进先出队列。元素按优先级顺序被移除,该队列也没有上限(看了一下源码,PriorityBlockingQueue是对 PriorityQueue的再次包装,是基于堆数据结构的,而PriorityQueue是没有容量限制的,与ArrayList一样,所以在优先阻塞 队列上put时是不会受阻的。虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError),但是如果队列为空,那么取元素的操作take就会阻塞,所以它的检索操作take是受阻的。另外,往入该队列中的元 素要具有比较能力。
最后,DelayQueue(基于PriorityQueue来实现的)是一个存放Delayed 元素的无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且poll将返回null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于或等于零的值时,则出现期满,poll就以移除这个元素了。此队列不允许使用 null 元素。
java中的queue类是什么,啥作用?
你好,先理解下:
在计算机学科中,基础数据结构之一 — Queue。你会想起Queue是一种数据结构,在它里边的元素可以按照添加它们的相同顺序被移除。在以前的Java版本中,这中FIFO(先进先出)数 据结构很不幸被忽略了。随着Java1.5(也叫Tiger)的出现,对Queue支持第一次成为固有特性。
例子核心代码:
QueueString myQueue = new LinkedListString();
myQueue.add("Add Me");
myQueue.add("Add Me Too");
String enqueued = myQueue.remove();
前面的定义才是重点,剩下的与集合类差不多。
java中创建队列Queue的问题
因为queue是接口,不能new 接口,应该new接口实现类,你看jdk文档,搜索queue,如图:
看见下面有一大堆实现queue的类,选一个就行,针对队列的,你可以选LinkedBlockingQueue,AbstrctQueue,ArrayDeque
求大神一个java程序,创建一个queue 的一行数字
package tool;
import java.util.Enumeration;
import sun.misc.Queue;
public class MyQueue extends Queue
{
public static void main ( String[] args )
{
MyQueue mq = new MyQueue ();
for ( int i = 0; i 10; i++ )
{
mq.enqueue ((int) ( Math.random () * 6 + 1 ));
}
int sum = 0;
Enumeration? enumer = mq.elements ();
while (enumer.hasMoreElements ())
{
Object object = (Object) enumer.nextElement ();
if (object instanceof Integer)
{
sum += (Integer) object;
}
System.out.print (object + " ");
}
System.out.println ("\nsum = " + sum + " , average = " + sum / 10);
}
}
求用Java的LinkedList类创建一个链队列(LinkedQueue)类
LinkedQueue类代码:
import java.util.LinkedList;
public class LinkedQueue {
private LinkedList list;
private LinkedQueue() {
}
public LinkedQueue(LinkedList list) {
this.list = list;
}
//入队
public void add(Object obj) {
this.list.add(obj);
}
//获取队关元素
public Object get() {
return this.list.getFirst();
}
//出队
public void next() {
this.list.removeFirst();
}
//判定为空
public boolean isEmpty() {
return this.list.isEmpty();
}
//获取当前列队长度
public int size() {
return this.list.size();
}
}
测试类代码:
import java.util.LinkedList;
public class Test {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("no1");
list.add("2");
list.add("215");
//获取初始linkedqueue;
LinkedQueue lq = new LinkedQueue(list);
System.out.println("获取队头元素 : " + lq.get());
lq.add("add");
System.out.println("入队后队列长度:: " + lq.size());
lq.next();
System.out.println("出队队列长度 : " + lq.size());
System.out.println("出队后队头元素 : " + lq.get());
System.out.println("判定为空 : " + lq.isEmpty());
}
}
Java构造queue的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于JAVA构造方法、Java构造queue的信息别忘了在本站进行查找喔。
发布于:2022-12-03,除非注明,否则均为
原创文章,转载请注明出处。