自定义队列

队列 一.数组与一般队列的区别

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 类名<数据类型>();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值