我想建立一个固定长度的数组,用来不断接受数据,要求先进先出,最后进的数据处在数组的最前端.求问怎么实现比较好?
解决方案 »
- Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
- java计算器弹出窗口问题 有代码,请帮助找找
- 为什么去掉requestFocus(true)就无法获得聚焦
- mina 框架如何发送字节数组
- java.speech 这个jar那里有下
- 80分 就怎么多了 10点能搞定的回啊
- 执行JAR时出现问题!
- 面向对象思想(OOP)
- 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
- 想实现一个定期刷新APP,获取更新的功能
- 求帮忙找出空指针变量值
- 一个java面试题,求帮助
或者直接用java自带的Queue,这个免掉了自己实现数据结构代码。
你用来不断的接收数据,那数组最好不用,数组都是要初始化时就给定长度的,你定义的数组太大浪费内存空间,太小不够你用;
还是直接用Queue吧
2、数组的话,最好用两个指示标志,指示数组第一个和最后一个元素位置,进数据和出数据是分别改变指示标志
3、你要求的"最后进的数据处在数组的最前端",每进来一个数都要做循环移位,大量数据的话根本就不可取,严重影响系统性能,初学的话可以借鉴
最后,按你要求给你实现了,代码如下:
public class test{
private static int arr[];
private static final int n = 5;
public static void main(String args[]) throws InterruptedException{
arr = new int[n];
while(true){
Thread.sleep(500);
int ran = (int)(Math.random()*100);
System.out.println(inout(ran)+"\t"+ran);
}
}
public static int inout(int in){
int m = arr[n-1];
for(int i = n-1;i>0;i--){
arr[i] = arr[i-1];
}
arr[0] = in;
return m;
}
}给分哦
public class ArrayQueue<V>{
private final v[] values;
private final int size;
private int head = 0;
private int tail = 0;
private int count =0;
public ArrayQueue(int size){
this.size = size;
values = (V[])new Object[size];
} public void put(V value){
values[tail] = value;
if(++tail == values.length)
tail = 0;
count++;
} public V take(){
if(count == 0)
return null; V v = values[head];
values[head] = null;
if(++head == values.length)
head = 0; count--;
return v;
}
}
/** 容量 */
private final int capacity;
/** 数据 */
private final int[] data; // 或者泛型T[] data
/** 当前队列第一个元素的位置 */
private int offset = 0;
/** 当前队列大小 */
private int count = 0;
public LIFO(int capacity) {
this.capacity = capacity;
this.data = new int[capacity];
}
/**队尾加入*/
public void offer(int x) {
int pos = offset + count;
if (pos >= capacity) {
pos -= capacity;
}
data[pos] = x;
if (count < capacity) {
count++;
} else {
offset = (offset + 1) % capacity;
}
}
/**队首移出,没有抛异常*/
public int poll() {
if (count == 0) {
throw new NoSuchElementException();
}
int x = data[offset];
offset = (offset + 1) % capacity;
count--;
return x;
}
@Override
public String toString() {
String sp = "";
StringBuilder buff = new StringBuilder(capacity << 2).append('[');
buff.append("capacity=").append(capacity);
buff.append("|offset=").append(offset);
buff.append("|count=").append(count);
buff.append("|data=");
for (int i = 0; i < count; i++) {
int pos = (offset + i) % capacity;
buff.append(sp).append(data[pos]);
sp = ", ";
}
return buff.append(']').toString();
}
public static void main(String[] args) {
LIFO lifo = new LIFO(5);
for (int i = 1; i <= 10; i++) {
lifo.offer(i);
System.out.println(lifo);
}
for (;;) {
System.out.println(lifo.poll());
System.out.println(lifo);
}
}
}