java简单的可随机访问的队列(根据下标index访问)的实现最近在做的项⽬中有绘制图表的功能,需要实时更新显⽰数据,本想⽤队列来存储数据,通过⼊队出队来更新数据,但普通队列只⽀持访问队头元素,⽽绘制图表需要遍历队列,于是就有了⾃⼰实现⼀个可随机访问队列的想法。
实现也很简单,内部直接⽤ArrayList实现来实现循环队列.
功能:⼊队,出队,随机访问队列元素,获取队列容量,清空队列,判断队空队满
直接上代码:
package utils;
import java.util.ArrayList;
/**
* @author 没事啦
* 为⽀持队列的随机访问,⾃定义⼀个简单长度固定的队列的队列
* 内部⽤ArrayList实现来实现循环队列
* 规则:从队尾进,从队⾸出
* @param <T> 数组元素类型不固定
*
*/
public class RandomAccessQueue<T> {
private int size; //队列容量
public int length; //队列长度
private int front,rear; //队⾸序号,队尾序号
private ArrayList<T> list;
public RandomAccessQueue(int size) {
list = new ArrayList<T>(size);
for(int i=0;i<size;i++) {
list.add(null);
}
this.size = size;
this.front = 0;
}
/**
* 获取index所对应的元素,这种随机访问队列相对于普通队列的最重要的作⽤
* @param index 需要访问的元素序号(从队⾸到队尾的序号,队⾸序号为0)
* @return index所对应的元素,index超出队列的长度则返回null
*/
public T get(int index) {
if(index>length) {
return null;
}
((front+index)%size);
}
/**
* 队⾸元素出队
* @return 出队的队⾸元素,如果队列为空,则返回null
*/
public T take() {
if(length<=0) {
return null;
}
T t = (front);
list.set(front, null);
front = (front+1)%size;
length--;
return t;
}
/**
* 元素⼊队
* @param t ⼊队元素
* @return 如果队满,则⼊队失败,返回false,否则将元素插⼊队尾,返回true  */
public boolean offer(T t) {
checkNotNull(t);
if(length==size) {
return false;
}
list.set(rear, t);
rear = (rear+1)%size;
length++;
return true;
}
/**
* 获取队列的容量
* @return 队列的容量
*/
public int size() {
return size;
}
private static void checkNotNull(Object v) {
if (v == null)
throw new NullPointerException();
}
/**
* 清空队列
*/
public void clear() {
for(int i=0;i<size;i++) {
list.set(i,null);
}
this.front = 0;
}
/**
* 判断队列是否为空
* @return 是否为空
*/
public boolean isEmpty() {
if(length==0) {
return true;
}
return false;
}
/
**
* 判断队列是否满
* @return 是否满
*/
public boolean isFull() {
if(length==size) {
return true;
}java中index是什么意思
return false;
}
}
只是实现了队列最基本的部分功能,有其他需求可再进⾏扩展
注:本队列中⽤size表⽰的队列的容量,length表⽰队列的长度,可能和平时使⽤集合类的习惯有所不同

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。