java数组菜鸟升级版(队列=“无限数组”?)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java数组菜鸟升级版(队列=“无限数组”?)

java数组菜鸟升级版(队列=“无限数组”?)

 2013/9/28 18:49:42  sxyplibo  程序员俱乐部  我要评论(0)
  • 摘要:数组作为一种便捷的储存大量同类型数据的数据结构,是很常用并且很受欢迎的,但是刚刚接触时处理具体情境总是会遇到一个问题:在不知道数据数量的情况下,如何定义数组长度?本文以一维数组为例,来解决这个问题,指导建立队列,并介绍一些简单的操作(多维只是比一维多几维而已,没什么大区别的,就是加几阶循环罢了)。直接配着代码来讲吧publicclassarray{//定义一个长度为0的初始数组(不知道长度?先建一个固定长度的总可以吧)String[]src=newString[0];//建立队列(队列的实质
  • 标签:数组 Java 队列

?????? 数组作为一种便捷的储存大量同类型数据的数据结构,是很常用并且很受欢迎的,但是刚刚接触时处理具体情境总是会遇到一个问题:在不知道数据数量的情况下,如何定义数组长度?

?????? 本文以一维数组为例,来解决这个问题,指导建立队列,并介绍一些简单的操作(多维只是比一维多几维而已,没什么大区别的,就是加几阶循环罢了)。

?????? 直接配着代码来讲吧

?

?

?

?

?

?

class="java" name="code">public class array {
	//定义一个长度为0的初始数组(不知道长度?先建一个固定长度的总可以吧)
	String[] src = new String[0];
	//建立队列(队列的实质,就是当原有数组不够用时,建一个新的,在把内容加进去,
	就像我们嫌弃衣服小了,就再买一件新的大一点的衣服,再把人“装进去”)
	public void add(String s){
		//定义新数组,长度是原始数组长度+1
		String[] dest = new String[src.length+1];
		//将原数组中的数据按下标顺序拷贝到新数组
		for(int i=0;i<src.length;i++){
			dest[i]=src[i];
		}
		//将新元素放到新数组最后一个下标位置(继续添加元素)
		dest[src.length] = s;
		//将新数组赋给原数组(其实就是src这个数组名由原先的数组的地址改
		为向新数组的首地址)
		src = dest;	
	}
	//至此无限数组完成,只要注意添加方式是用add,就可以无限添加对应类型的数据
	//接下来是对数组相关知识的一些扩充,因为本质和刚刚的“无限数组”类似,一起介绍	 
	
	/**
	 * 首先是取出对应下标位置的元素!!!
	 * @param index 元素的下标位置
	 * @return 返回取得的元素
	 */
	public String get(int index){
	    if(index<0||index>=src.length){	
		     throw new RuntimeException("传入的下标超出边界:"
				+src.length);
	    }
	    return src[index];
	}
	
	
	/**
	 * 容器中的元素个数
	 * @return 返回元素个数
	 */
	public int size(){
		return src.length;
	}
		
//	*******************************************
	/**
	 * 现在来删除指定下标的元素~(删是加的反面~)
	 */
	public void delete(int index){
		//定义新数组,长度是原始数组长度-1
		String[] dest = new String[src.length-1];
		//将原数组中的数据按下标顺序拷贝到新数组(跳过指定位置的元素)
		for(int i=0;i<index;i++){
			dest[i]=src[i];
		}
		for(int i=index+1;i<src.length;i++){
			dest[i-1]=src[i];
		}
		//将新数组赋给原数组
		src = dest;	
	}//其实就是在复制数组时跳过指定元素不复制
	
		
	/**
	 * now,我们来将值为s的元素删除(套用一下上一个吧)	
	 * @param 指定元素s
	 */
	public void delete(String s){
		for(int i=0;i<src.length;i++){
			if(src[i].contains(s))//确定该元素下标
				delete(i);
		}
	}//contains这类函数还有很多,在这里equals也可以起到一样的作用
		
	/**
	 * 恩,这回是插入……
	 * 将指定元素s插入指定位置index
	 * @param s
	 * @param index
	 */
	public void insert(String s,int index){
		//定义新数组,长度是原始数组长度+1
		String[] dest = new String[src.length+1];
		//将原数组中的数据按下标顺序拷贝到新数组
		for(int i=0;i<index;i++){
			dest[i]=src[i];
		}
		//将新元素放到新数组指定下标位置
		dest[index] = s;
		for(int i=index;i<src.length;i++){
			dest[i+1]=src[i];
		}
		//将新数组赋给原数组
		src = dest;	
	}//就是在复制过程中加一个,是删除和添加的原理结合
		
	/**
	 * 最后,将指定位置的元素修改为指定的值
	 * @param 修改后元素s
	 * @param 指定位置index
	 */
	public void modify(String s,int index){
		//定义新数组,长度是原始数组长度
		String[] dest = new String[src.length];
		//将原数组中的数据按下标顺序拷贝到新数组
		for(int i=0;i<index;i++){
			dest[i]=src[i];
		}
		//将新元素放到新数组指定下标位置
		dest[index] = s;
		for(int i=index+1;i<src.length;i++){
			dest[i]=src[i];
		}
		//将新数组赋给原数组
		src = dest;	
	}//好吧,它是复制过程中把跳过的那个赋了值		

}


?

????????????? 其实其他几个功能是队列(add)的衍生,有时候一点点的创意的火花可以点燃一片草原,而每颗小草都可以发展成一片草原,多维数组就交个读者自己发展吧~~

?

?

发表评论
用户名: 匿名