自定义队列的目的:
原因一:在java中定义数组都是有一定长度的,因为在java中是无法
动态改变内存的。在我们进行二维数组重绘画板的时候,有时就会出
现数组下标溢出的情况。
原因二:数组在定义的时候,数据类型就已经固定了,所以存储的类
型也就固定了。
所以,我们要用自定义队列。
自定义队列怎样实现动态改变数组?
定义一个类,因为类和数组一样都是存储数据的容器,再在这个类里
面封装一个数组,在类中对数组进行添加、删除、查找、改动等操作
,也就是说在这个类中定义这一系列的方法来实现。
那么下面,用代码来说明步骤:
//定义一个DefinedList类
public class DefinedList {
//在这个类里面封装一个数组
Object[]list=new Object[0];
//定义添加方法
public void add(Object style){
Object[] op=new Object[list.length+1];
//要添加的元素赋给新数组的最后一个位置
op[list.length]=style;
//将原始数组中的数据和要添加的数据存储到
新的数组中
for(int i=0;i<list.length;i++){
op[i]=list[i];
}
//交换数组
list=op;
}
//删除方法和添加方法步骤是很类似的
public void delete(int index){
//不过长度减1了
Object[] oj=new Object[list.length-1];
//如果要删除数组元素的索引小于0并且大于数组长度则返回,不执
行
if(index<=0&&index>list.length){
return;
}
//i小于索引的时候,前面的就相等
for(int i=0;i<index;i++){
oj[i]=list[i];
}
//i大于索引的时候,赋值给新数组,删掉就相当于原来的
索引-1
for(int i=index+1;i<list.length;i++){
oj[i-1]=list[i];
}
list=oj;
}
public Object search(int index){
return list[index];
}
public int size(){
return list.length;
}
}
接着再定义一个主方法:
import java.util.Random;
import Inherit.Script;
public class Test {
/**
* 定义一个主方法来实现队列
*/
public static void main(String[] args) {
//实例化一个DefinedList类的对象dl
DefinedList dl=new DefinedList();
//循环加入15个元素
for(int i=0;i<15;i++){
//实例化一个Script类的对象sc
Script sc=new Script() ;
//将数字强制转换为char型
sc.name="名字"+(char)(69+i);
//实例化随机数对象
Random rand=new Random();
//随机数对象在100之内取值
int j=rand.nextInt(100);
//这些100内的随机数就是sc.name的分数
sc.score="分数"+j;
//加入队列中
dl.add(sc);
}
//删掉index=8的元素
dl.delete(8);
for(int i=0;i<dl.size();i++){
//循环找到每一个元素
Script df=(Script)dl.search(i);
//输出
System.out.println(df.name+"的分数是:"+df.score);
}
}
}
在这中间出现了一个问题:
就是最后面:
Script df=(Script)dl.search(i);
//输出
System.out.println(df.name+"的分数是:"+df.score);
在这里,我第一次没有将dl强制转换为Script类型的,这样就总会报
错,如果都定义成Object类的,虽说java中所有类的父类都是它,但
是却无法调用Script中的姓名,分数等属性,所以必须强转,这样就
避免了许多错误。