自定义队列
程序员文章站
2024-03-18 11:38:46
...
队列 一.数组与一般队列的区别
1.数组在定义的时候必须得指定数据类型和数组的长度。
2.数组在内存中的存储是连续的,它的每个元素都有对应的下标。
3.队列是一种自定义的数据结构,它的功能是可以自己编写的。
4.一般的队列可以实现动态的增加数据的长度,这样在使用的时候就会比数组要灵活的多。
5.一般的队列还可以任意插入或删除数据,而数组却不能直接实现。
6.一般对列还有其他的功能,这可以自己增加。
二.队列的泛型
1.一般队列不足:因为在定义的时候已经指定了它的数据类型,所以它只能用在相应的数据类型。如果要给不同 的数据类型使用,又必须得重新写相应数据类型的队列。
2.为了弥补一般队列的不足,我们可以定义泛型队列,它就能很好解决以上的不足。
3.泛型队列是只在定义的时候不指明其数据类型,而是用<任意字母>(一个标记)代替数据类型,但是在创建对 象的时候必须得指明它的数据类型。
4.泛型队列的优点:可以被任意数据类型使用,这样可以提高它重复使用的效率。
5.格式:
public class 类名<任意字母>()
{
/* *在Java中所有的类都是Object类的子类,
子类可以自动转型为父类 *基本的数据类型不能作为对象,
但它们都会有相应的类 */ //更多自定义的方法 }
实例:
public class mylist<E> {
//将数组定义为Object数组,表示能存放Java中所有的对象
private Object[] src = new Object[0];
/**
* 将指定的数据放入队列容器中
*
* @param e
* 要放入队列容器的数据
*/
public void add(E e) {
//定义一个新数组,长度是原始数组长度+1
Object dest[] = new Object[src.length+1];
//将新元素放入新数组最后一个下标位置
dest[src.length] = e;
//将原始数组中的元素按照下标顺序拷贝到新数组
for(int i=0;i<src.length;i++){
dest[i] = src[i];
}
//将原数组名指向新数组
src = dest;
}
/**
* 取出指定下标位置的元素
*
* @param index
* 要取出的元素的下标
* @return 返回取得的元素
*/
public E get(int index) {
//得到src对应下标的元素
E e = (E)src[index];
return e;
}
/**
* 删除指定位置的元素
*
* @param index
* 要删除的元素的下标
*/
public void delete(int index) {
//创建一个长度比src小1的数组
Object [] arr =new Object[src.length-1];
//拷贝下表之前的元素
for(int i=0;i<index;i++){
arr[i]=src[i];
}
//拷贝下标之后的元素
for(int j=index;j<src.length;j++){
arr[j]=src[j+1];
}
//修改后让src指向arr
src=arr;
}
/**
* 将指定位置的元素修改为指定的值
*
* @param index
* 要修改的元素的下标
* @param num
* 修改之后的新值
*/
public void modify(int index, E e) {
src[index] = e;
}
/**
* 在指定的位置插入指定的元素值
*
* @param index
* 要插入元素的位置
* @param e
* 要插入的元素
*/
public void insert(int index, E e) {
//创建一个比src大1的数组
Object [] arr =new Object[src.length+1];
//拷贝添加的元素下标之前的元素
for(int i=0;i<index;i++){
arr[i]=src[i];
}
//添加要插入的元素
arr[index]=e;
//拷贝添加元素下标之后的元素
for(int j=index;j<arr.length;j++){
arr[j+1]=src[j];
}
//让src重新指向arr
src=arr;
}
/**
* 得到容器中元素个数的方法
*
* @return 返回容器中的元素个数
*/
public int size() {
//队列长度就是src数组的当前长度
int len = src.length;
return len;
}
}
6.创建对象的时候,类名<数据类型>=new 类名<数据类型>();
下一篇: 自定义队列