java队列有哪些,java本地队列


java中的队列都有哪些, 有什么区别 常见的有:
有界队列:
ArrayBlockingQueue
LinkedBlockingQuene
【java队列有哪些,java本地队列】priorityBlockingQuene(具有优先级的队列)
无界队列:
SynchronousQuene

什么是队列, 如何快速 编写一个java的队列类 阻塞队列与普通队列的区别在于, 当队列是空的时, 从队列中获取元素的操作将会被阻塞, 或者当队列是满时, 往队列里添加元素的操作会被阻塞 。 试图从空的阻塞队列中获取元素的线程将会被阻塞, 直到其他的线程往空的队列插入新的元素 。 同样, 试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞, 直到其他的线程使队列重新变得空闲起来, 如从队列中移除一个或者多个元素, 或者完全清空队列.
Java中的队列都有哪些, 有什么区别 用的比较多的是线程安全的
arrayblockingqueue
或者是
linkedblockingqueue.
java队列类 //通过LinkedList实现队列
package 队列和堆栈;
import java.util.*;
public class LinkedListQueueTest {

//字段
private LinkedList list;

//无参数构造
public LinkedListQueueTest()
{
list=new LinkedList();
}

//队列元素的个数
public int size()
{
return list.size();
}

//进入队列
public void enqueue(Object obj)
{
list.addLast(obj);

}

//对头出来
public Object dequeue()
{
return list.removeFirst();
}

//浏览对头元素
public Object front()
{
//return list.getFirst();
return list.peekFirst();
}

//判断队列是否为空
public boolean isEmpty()
{
return list.isEmpty();
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

LinkedListQueueTest llq=new LinkedListQueueTest();
System.out.println(llq.isEmpty());
llq.enqueue("147");
llq.enqueue("258");
llq.enqueue("369");
System.out.println(llq.size());
System.out.println("移除队列头元素:"+llq.dequeue());
System.out.println(llq.size());
llq.enqueue("abc");
llq.enqueue("def");
System.out.println(llq.size());
System.out.println("查看队列的头元素:"+llq.front());
System.out.println(llq.size());
System.out.println(llq.isEmpty());

}

}
通过数组实现
package 队列和堆栈;

import java.util.NoSuchElementException;

//通过数组来实现队列
public class ArrayQueue {
//字段
public static Object[] data;
//队列的元素个数
protected int size ;
//队列头
protected int head;
//队列尾
public static int tail;
/**
*
*/
//无参数构造函数
public ArrayQueue() {
final int INITIAL_LENGTH=3;
data=http://www.ncwxdh.com/p/new Object[INITIAL_LENGTH];
size=0;
head=0;
tail=-1;
}

//队列元素个数方法
public int size()
{
return size;

}

public boolean isEmpty()
{
return size==0;
}

//得到队列头元素
public Object front()
{
if(size==0)
throw new NoSuchElementException();
return data[head];

}

//进入队列enqueue()方法
public void enqueue(Object obj)
{
//此时队列已经满
if(size==data.length){
Object[] oldData=http://www.ncwxdh.com/p/data;
data=http://www.ncwxdh.com/p/new Object[data.length*2];
//if(head==0)
System.arraycopy(oldData, head, data, 0, oldData.length-head);
if(head>0)
System.arraycopy(oldData, 0, data, head+1, tail+1);
head=0;
tail=oldData.length-1;

}
tail=(tail+1)%data.length;
size++;
data[tail]=obj;

}

//队列的元素出队
public Object dequeue()
{
if(size==0)
throw new NoSuchElementException();
Object ele=data[head];

推荐阅读