java集合框架之自定义队列

    java集合框架最初是源自于数组,所以我们在学习java集合框架的时候一定不要脱离了数组的思想。数组的出现给了人们另一种新的对数据处理的认识观。

    我们知道,数组定义时必须指定长度,这就在一定程度上限制了数组的功能。于是集合框架就应运而生了,简单地说,现在我们要讲的自定义队列就是会变长的的数组。可以想象,实现这一功能是非常简单的,只要我们得到当前数组长度,然后根据这个数值新创建一个具有新的长度的数组,就可以了。

    自定义队列的主要思想就是上述所讲了,根据这个思想,现在我们就又可以多实现一些功能,比如:把一个数据插入到对列(数组)的第六号位置、删除第六号位置上的数据,,,

如下代码:

package hhf.自定义队列1020;

public class queue {
//创建一个最大众化的对象
	int [] list = new int[0];
//添加函数
	public void add(int i2){
//创建一个比原来数组大一号的新数组	
		int [] listnew = new int[list.length + 1];  
//添加数据到最后一位
		listnew[list.length] = i2;
//前面的空位全用list中原来的数据补充
		for(int i = 0; i< list.length; i++)
			listnew[i] = list[i];
//还给list指针
		list = listnew;
		
	} 
//删除一个元素
	public void delete(int index){
//如果不在数组里 就不要删除了
		if(index < 0 || index >= list.length)
			return;
//创建一个比原来数组短一号的数组	
		int [] listnew = new int[list.length - 1];  
//删除的那个号前的元素全部复制到新的数组	
		for(int i = 0; i< index; i++)
			listnew[i] = list[i];
//跳过那个元素,继续复制
		for(int i = index+1; i< list.length; i++)
			listnew[i-1] = list[i ];
//还给list	
		list = listnew;
	} 
//查找函数
    public int find(int index){
		return list[index];
	} 
//返回大小
	public int size(){
		return list.length;
	} 
}

 

 

我们现在相当于把数组封装起来了,创建了一个queue类,在类中提供了add,delete,find,size函数,使用的时候我们就创建一个queue类的对象,调用对象的方法,隐形的使用了数组。

如下面就是一种使用的方法

 

package hhf.自定义队列1020;

import java.util.Random;

public class test {
	public static void main(String[] args) {
//定义一个队列对象
		queue q_list = new queue();
//用随机数的方法来选择队列中元素的个数
		Random ran = new Random();
		int	size = ran.nextInt(20);
//用以个for循环添加队列元素
		System.out.println("一共有队列元素    "+size+"  个");
//添加元素
		for(int i = 0;i < size ; i++)
			q_list.add(i);
//打印队列元素
		for(int i = 0; i < q_list.size(); i++)
			System.out.println(q_list.find(i));
		System.out.println("============================");
//删除六号元素
		q_list.delete(6);
		System.out.println("删除第六号元素后一共有队列元素    "+q_list.size()+"  个");
//打印队列元素
		for(int i = 0; i < q_list.size(); i++)
			System.out.println(q_list.find(i));
	}

}

 有了这样的队列类使用起来就比较简单而且容易理解。

     当我们肯定了以上的思维后,我们再稍微做一点点拓展——可以改变数组里保存的数据类型。要实现这个功能也只需要稍微改变代码就可。

package hhf.自定义泛型1021;

public class Generics<E> {
//创建一个最大众化的对象
	Object [] list = new Object[0];
//添加函数	
	public void add(E i2){
//创建一个比原来数组大一号的新数组
		Object [] listnew = new Object[list.length + 1];  
//添加数据到最后一位
		listnew[list.length] = i2;
//前面的空位全用list中原来的数据补充
		for(int i = 0; i< list.length; i++)
			listnew[i] = list[i];
//还给list指针
		list = listnew;
	} 
//删除一个元素
	public void delete(int index){
//如果不在数组里 就不要删除了
		if(index < 0 || index > list.length)
		return;
//创建一个比原来数组短一号的数组	
		Object [] listnew = new Object[list.length - 1];  
//删除的那个号前的元素全部复制到新的数组	
		for(int i = 0; i< index; i++)
			listnew[i] = list[i];
//跳过那个元素,继续复制
		for(int i = index+1; i< list.length; i++)
			listnew[i-1] = list[i ];
//还给list	
		list = listnew;
	} 
//查找函数
	public Object find(int index){
		return list[index];		
	} 
//返回大小
	public int size(){
		return list.length;
	} 	
}

 我们发现只要将

 int [] list = new int[0];改为Object [] list = new Object[0];

 即,将数据类型改为Object,

 只要将public void add(int i2)改为public void add(E i2)

 即,将行参类型改为E  ,就可以了。

 

   那么在使用的时候也就相应发生了细微变化

   改queue q_list = new queue();为

     Generics<String> generics_list = new Generics<String>();在创建对象的时候给它指定类型就可以了。

   以上就是我给大家介绍的自定义队列,说白了,上面所述的队列也就是另一种升级版的数组了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值