前些天听课讲到了数组队列,在此写篇博客来谈谈数组队列并巩固所学
首先来谈谈什么是数组
1.数组在java中是一种数据结构,是数据结构中访问速度最快的一种,数组也是一个容器,作用就是用来存储多个同一类型的数据。
2.数组的优缺点:优点是访问速度较快,首先数组是不可变的,不可变的理由是因为数组一旦被定义,那么就确定了所存储的数据类型和数组的长度,数组定义后在内存中所占空间也就确定了,这也是数组访问速度较快的原因。缺点就是同一数组不能存储不同类型的数据,同时如果我们定义的数组长度太小,会导致我们存不下数据,定义太长又会浪费内存空间。所以这个时候我们就想如果数组是动态的,长度和存储的数据类型都可变那就很NICE,所以我们就需要队列。
所以下面我们来谈谈怎样写一个数组队列
首先我们得明确数组队列只是通过数组这个数据结构来实现存储多个不同数据类型的类,既然是个类那么就有属性和方法,那么我们先来对比数组,数组中只有一个length属性,但是有从Object父类中继承的属性和方法,那么我们只要定义Object数组,然后重写方法就行了。但是要满足数组队列中只能存储一种数据类型,但是又要存储任何数据类型。这时候就只能用到jav中的泛型。
那么废话不多说,贴代码
public class MyArrayList<E> {
//声明初始的数组名
private Object[] Array;
//声明数组队列的元素个数名
private int size;
//length表示数组队列的初始长度
private int length=1;
//重写构造方法
public MyArrayList(int length){
this.length=length;
Array=new Object[length];
}
这里小编就简单写了4中方法,分别是往数组队列中加元素,在指定插入元素,删除指定位置元素以及清空数组队列。下面贴代码
//往队列中添加元素的方法
public void add(E e){
//如果数组队列中元素个数小于长度,那么就加元素e
if(size<length){
Array[size]=e;
size++;
}else{
//如果数组队列中元素个数大于长度,则扩充数组长度
Object newAarry[]=new Object[2*length];
for(int i=0;i<Array.length;i++){
newAarry[i]=Array[i];
}
Array=newAarry;
length=newAarry.length;
//扩充完之后添加元素
Array[size]=e;
size++;
}
}
//移除队列中s所有元素的方法
public boolean removeall(){
Object[] newArray=new Object[0];
Array= newArray;
size=0;
if(Array.length==0)return true;
else return false;
}
//在指定位置插入元素
public void resert(int location,E e){
if(location>length||location<0){
return;
}else{
//先扩充数组的长度
Object newArray[]=new Object[length+1];
newArray[location]=e;
for(int i=0;i<location;i++){
//把数组Array后面的数放入newArray中
newArray[i]=Array[i];
}
//把location后面的数放入newArray中
for(int i=location;i<size;i++){
newArray[i+1]=Array[i];
}
//把newArray地址给Array
Array=newArray;
size++;
}
}
//移除指定位置的元素
public E remove(int location){
int Location=location-1;
for(int i=0;i<length;i++){
if(i==Location){
Array[Location]=null;
for(int j=i;j<length-1;j++){
Array[j]=Array[j+1];
}
}
}
size--;
return (E) Array[Location];
}
//获取指定位置元素
public E get(int location){
if(location<0||location>=size){
return null;
}else{
return (E) Array[location];
}
}
int size(){
return size;
}
这样数组队列就完成了。