数据结构 - 数组队列
上一篇博客我们提到了数据结构中访问速度最快的数组,但是数组在使用时有一些限制
数组在定义的时候就必须定义存储的类型和大小,定义完成之后不能修改数据类型和大小,而我们在大多数实际使用时,对于将要存储的数据的类型以及大小是不确定的
如果数组设置大了就会浪费内存,小了又会不够用
为了利用到数组访问速度快这个优点的同时又想实现我们实际使用时的需求
虽然Java的给我们提供了一个ArrayList的类
但是我们可以利用数组这个数据结构来实现我们自己定义的数组队列
解决存储类型的问题:
为了实现存储各种类型的数据,我们在声明初始数组时的数据类型可以使用对象
因为对象是所有类的父类;同时的Java中所有的基本数据类型都有一个对应的封装类
因为我们在定义数组队列时还不确定将要存储何种数据类型的数据,所以我们在定义时需要用到泛型(作用类似于一个占位符))
解决存储数据个数的问题:
这个其实很简单,不熟悉数组在内存中的存储的可以参考我的上一篇博客
因为数组名里存储的是内存中的首地址,所以我们只需要用一个变换后的数组来存储变化后的数组
然后把新数组名里存储的首地址赋给原来的数组,这样就实现了数组的更新。
可以利用上述方法实现添加,获取,删除,removeall过,更新,szie方法
部分示例代码:
这里以实现添加方法举例
public class MyArrayList<E> {
private int size;//表示数组队列中元素个数
private Object[] array=new Object[0];//声明初始数组
public void add(E e){
//创建新数组,长度是原来数组长度加1
Object[] newarray=new Object[array.length+1];
for(int i=0;i<array.length;i++){
newarray[i]=array[i];
}
//将要添加的元素加入新的数组中
newarray[array.length]=e;
//将新数组名中存储的地址赋给array
array=newarray;
size++;
}