学过编程语言的同学都知道,我们可以用数组来储存数据,可是数组有一个非常大的弊端就是一旦定义后就无法改变其长度,可是在很多情况下我们是无法预计我们所要存的数据有多少的,比如:我需要存储多个的学生信息,但是先却不知道学生的个数,此事,定义一个自定义队列,就可以很快解决,下面我给大家做个示范,如何定义自定义列表:
我们所定义的学生类:
//这个类只用于测试:
文件名: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
????
?? }
?
??
}
(未完成项目之后会公布答案~大家稍安勿躁哈)