?????? 数组作为一种便捷的储存大量同类型数据的数据结构,是很常用并且很受欢迎的,但是刚刚接触时处理具体情境总是会遇到一个问题:在不知道数据数量的情况下,如何定义数组长度?
?????? 本文以一维数组为例,来解决这个问题,指导建立队列,并介绍一些简单的操作(多维只是比一维多几维而已,没什么大区别的,就是加几阶循环罢了)。
?????? 直接配着代码来讲吧
?
?
?
?
?
?
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)的衍生,有时候一点点的创意的火花可以点燃一片草原,而每颗小草都可以发展成一片草原,多维数组就交个读者自己发展吧~~
?
?