数组队列是一种大小可以改变,类型没有定死的类似数组的工具。不过与数组相比,它更具有灵活性。因为它不但不用担心越界问题,而且因为泛型(类似c++中模板的东西)的存在而支持各种类型。
以下是数组队列的功能实现代码:
import List.Student; public class ArrayList <E> { private Object[] array; private int size; private int addNum; public int getSize() { return size; } //构造函数一 public ArrayList(int addNum) { this.addNum=addNum; size=0; array = new Object [addNum]; } //构造函数二 public ArrayList() { /* * this的三种用法 : * 1.调用属性 : this.属性名 * 2.调用方法 : this.方法名 * 3.调用构造方法: this.(实参) */ //调用构造函数一 this(5); } //增加元素 public void add(E elem) { //判断是否越界(实现不受长度控制的关键) if(size==array.length) { //越界则创建新数组 Object []temp=new Object[addNum+size]; //复制元素到新数组中 for(int i=0;i<array.length;i++) { temp[i]=array[i]; } //指向新数组名,便可以继续使用array了 array=temp; } array[size]=elem; //修改大小 size++; } //删除 public void remove(int index) { //判断 if(index>=0&&index<size){ //修改大小 size--; //index后面的元素向前移动一位 for(int i=index;i<size;i++) { array[i]=array[i+1]; } } } //修改 public void change(int index,E elem) { //判断 if(index>=0&&index<size) array[index]=elem; //把值给要改变的位置的元素 } //查找 public void find(E elem) { //记录下标位置 int index=0; //判断有无此元素的标志 int flag=0; //遍历寻找 for(int i=0;i<size;i++) { if(array[i].equals(elem)) { //找到就输出 System.out.println("index="+index); //记录标志 flag=1; } index++; } //判断有无 if(flag==0) System.out.println("无此元素"); } //插入 public void insert(int index,E elem) { //判断 if(index>=0&&index<size){ //判断是否越界 if(size==array.length) { //越界则创建新数组 Object []temp=new Object[addNum+size]; //遍历复制元素 for(int i=0;i<array.length;i++) { temp[i]=array[i]; } //指向新数组 array=temp; } //修改大小 size++; //index 后面的元素都向后移动一位 for(int i=size-2;i>=index;i--) { array[i+1]=array[i]; } //index位置的值为插入的值 array[index]=elem; } } //输出 public void showInfo() { for(int i=0;i<size;i++) { System.out.print(array[i]+" "); } System.out.println(); } //递归法输出 public void showInfo2(int size) { //终止条件 if(size==1) { System.out.print(array[this.size-size]+" "); } else { System.out.print(array[this.size-size]+" "); showInfo2(size-1); } } public void showInfo2() { showInfo2(this.size); System.out.println(); } public static void main(String [] args) { ArrayList <Student> list = new ArrayList<Student>(); for(int i=0;i<10;i++) { list.add(new Student("学生"+(i))); } // System.out.println("size="+list.getSize()); // list.showInfo2(); // list.remove(0); // System.out.println("size="+list.getSize()); // list.showInfo(); // list.change(5, new Student("qinglong")); // System.out.println(list.getSize()); // list.showInfo(); // list.find(new Student("学生0")); // list.insert(0, new Student("qwerty")); // System.out.println(list.getSize()); list.showInfo(); } }
学生类如下:
public class Student { private String name; //构造函数 public Student(String name) { this.name=name; } //重写toString方法 public String toString() { return name; } //重写eqauls方法 public boolean eqauls(Student stu) { return name.equals(stu.name); } }
其中 调用构造方法: this.(实参) 也是第一次碰到。
我的这个数组对列虽然实现了,但有个缺陷,就是我所有的方法都是void类型。这样当我要用到某些东西的时候,可能就不行了。所以其中一些方法应该return一些东西。