[quote]
自定义队列,模仿系统已有的队列,实现相应的功能,中间利用数组作为队列数据的保存
[/quote]
自定义队列,模仿系统已有的队列,实现相应的功能,中间利用数组作为队列数据的保存
[/quote]
public class Manage {
private static Myquene<String> m;
public static void main(String args[]) {
// 自定义队列对象
m = new Myquene<String>(4,2);
// 初始化队列中的值
for (int i = 0; i < 5; i++) {
m.add("我是第" + i + "个对象");
}
showMsg();
}
/**
* 打印信息
*/
public static void showMsg() {
for (int i = 0; i < m.size(); i++) {
System.out.println(m.index(i));
}
}
}
public class Myquene<E> {
private Object dataA[];// 存放队列数据的数组
private static int initCap = 10;// 队列的初始长度
private static int increase = 1;// 队列的增长倍数
private int count = 0;// 队列中原有对象的计数器
// 无参构造器
public Myquene() {
this(initCap);
}
// 一个参数的构造器
public Myquene(int initCap) {
this(initCap, increase);
}
// 两个参数的构造器
public Myquene(int initCap, int increase) {
this.initCap = initCap;
this.increase = increase;
dataA = new Object[initCap];
}
/**
* 向队列中加入一个对象
*
* @param 要加入的对象
*/
public void add(E obj) {
dataA[count] = obj;
count++;
if (count == dataA.length) {
// 定义一个新的数组
Object dataB[] = new Object[initCap + initCap * increase];
// 把原有的数组内容放到新的数组中
for (int i = 0; i < dataA.length; i++) {
dataB[i] = dataA[i];
}
// 将新数组与新的数组进行交换
dataA = dataB;
}
}
/**
* 删除指定位置的对象
*
* @param 索引位置
*/
public void remove(int index) {
Object dataB[] = new Object[dataA.length - 1];// 定义一个新的数组
// 复制前一部分
for (int i = 0; i < index; i++) {
dataB[i] = dataA[i];
}
// 复制后一部分
for (int j = index + 1; j < dataA.length; j++) {
dataB[j - 1] = dataA[j];
}
// 将新数组与新的数组进行交换
dataA = dataB;
count -= 1;
}
/**
* 根据队列中的对象,得到指定的索引
*
* @param obj
* @return
*/
public int indexOf(E obj) {
if (obj == null) {
for (int i = 0; i < dataA.length; i++)
if (dataA[i] == null)
return i;
} else {
for (int i = 0; i < dataA.length; i++) {
if (obj.equals(dataA[i])) {
return i;
}
}
}
return -1;
}
/**
* 删除队列中的所有对象
*/
public void removeAll() {
Object dataB[] = new Object[0];
dataA = dataB;
count = 0;
}
/**
* 根据索引,返回指定的对象
*
* @param 索引位置
* @return 要得到的对象
*/
public E index(int i) {
return (E) dataA[i];
}
/**
* 队列为空时返回一个true
*
* @return 一个布尔值
*/
public boolean isEmpty() {
if (dataA.length == 0) {
return true;
} else {
return false;
}
}
/**
* 以队列中所含的对象的个数作为长度
*
* @return 队列长度值
*/
public int size() {
return count;
}
}