自定义队列
学过编程语言的同学都知道,我们可以用数组来储存数据,可是数组有一个非常大的弊端就是一旦定义后就无法改变其长度,可是在很多情况下我们是无法预计我们所要存的数据有多少的,比如:我需要存储多个的学生信息,但是先却不知道学生的个数,此事,定义一个自定义队列,就可以很快解决,下面我给大家做个示范,如何定义自定义列表:
我们所定义的学生类:
//这个类只用于测试:
文件名:Student
此文件定义了Student类,为了节约时间,只定义了两个属性,名字和年龄,下面我们将这给类所生成的对象存入我们的自定义队列中:
package Aprogram;
publicclass Student {
private String name;
privateintold;
Student(){
}
Student(String name,int old){
this.name = name;
this.old = old;
}
publicvoid showEverything(){
System.out.println("姓名:"+name+" 年龄:"+old);
}
}
文件名:Myfirstlist(接口)
定义接口很大的好处是规范,明确类需要拥有什么样的方法
package Aprogram;
publicinterface Myfirstlist<E> {
void add(E e);
void delet();
void delet(int index);
E get(int index);
int getLength();
void insert(E e,int index);
void addAll(Myfirstlist<E> list);
}
文件名:MyFirst
下面我将主要介绍自定义队列的增加元素,减少元素和get队列中的某个元素的方法
package Aprogram;
publicclass MyFirst<E> implements Myfirstlist<E>{
//继承接口
private Object[] srcA = new Object[0];//首先创建一个只有一个元素的数组,做为属性
//@Override
public MyFirst(){
}
//声明原始长度
public MyFirst(int OrignalLength){
Object[] srcA = new Object[OrignalLength];
this.srcA = srcA;
}//构造方法
//声明原始长度,增长率:(未完成)
public MyFirst(int OrignalLength,int increaseCount){
}
//添加一个元素
publicvoid add(E e) {
// TODO Auto-generated method stub
//如果初始数组没满
if(srcA[srcA.length-1]==null){
for(int i = 0; i<srcA.length;i++){
if(srcA[i]==null){
srcA[i]=e;break;
}
}
}
//如果已经满了
else{
//新建一个新的Student数组
Object[] text = new Object[srcA.length+1];
//把元素放在新数组最后
text[text.length-1] = e;
//将原数组的元素一一放入,新数组
for(int i = 0;i<srcA.length;i++){
text[i] = srcA[i];
}
srcA = text;
}//
}
@Overridepublicvoid delet() {
// TODO Auto-generated method stub
//(未完成)
}
@Override
//删除指定位置的元素
publicvoid delet(int index) {
// TODO Auto-generated method stub
Object[] text = new Object[srcA.length-1];
//申请一个少一个元素的数组
for(int i = 0;i<index;i++){
text[i] = srcA[i];
}//在删除点之前的元素照常添加
for(int i = index+1; i<srcA.length;i++){
text[i-1] = srcA[i];//把位置空出来,继续添加
}
srcA = text;//用新数组代替原数组
}
@Override
publicint getLength() {
// TODO Auto-generated method stub
returnsrcA.length;//(此方法不完整,没有考虑到初始长度,读者可以自己修改)
}//获取长度
@Override
public E get(int index) {
E st = (E)srcA[index];
return st;
}
@Override
publicvoid addAll(Myfirstlist<E> list) {
// TODO Auto-generated method stub
//接上新队列
}
@Override
publicvoid insert(E e, int index) {
// TODO Auto-generated method stub
}
}
(未完成项目之后会公布答案~大家稍安勿躁哈)