数组队列的实现原理
队列的定义
队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出****(FIFO—first in first out)线性表。
队列分为:
①、单向队列(Queue):只能在一端插入数据,另一端删除数据。
②、双向队列(Deque):每一端都可以进行插入数据和删除数据操作。
数组队列的原理
数组的大小是根据要添加的数据来决定的,即根据添加、删除数据的个数,来创建新的数组,而原数组名中存储的是新数组对象在堆内存空间的首地址。
即先在新数组名中存储新数组对象的首地址,再把这个首地址给原来数组名。
而原来的数组对象,由JVM(java虚拟机)的垃圾回收机制处理(销毁对象,释放内存空间),因此不需要自己处理。
数组队列的实现
是数组队列:定义类,封装对数组的操作。
特别地
如果对数组队列有以下要求:
1.在特殊情况,数组队列中只能存储某一种数据类型,如果存储其他的数据就报错。
2.在特殊情况,数组中可以存储任意一种数据类型的数据
则可以利用
泛型<K/V/E/T>…
泛型不是Java中的一种数据类型。
只是一个特殊的符号,可以在你不确定要存储什么类型的数据时,用
这个符号可以代替Java中所有的数据类型。
使用的时候,可以用对应的数据类型来代替这个符号,这样
就只能存储指定的这一种数据类型;
如果不指定,则任意一种数据类型都可以存储。
注意:因为它不是数据类型,因此构造数组时不要将数组的数据类型改为 E,但是方法中的参数都要改
以下为几个简单示例(代码不完整,请勿使用)
ublic class ArrayList<E>{
private Object[] array = null;
public boolean add(int index, MyArrayList<E> mal) {
return false;
}
public ArrayList() {
array = new Object[0];// 实例化数组对象,长度为0
}
public boolean add(int index, MyArrayList<E> mal) {
return false;
}
}