需要做的准备
首先需要搞搞清楚以下问题:
1.如何判断数组中有空值?
因为我们在创建数组的时候,数组的每个位置都有自己的默认值,因此一般的遍历是否为null的操作不能判断为空。如何解决呢?
(1)我们可以在数组中多加一个空间,用来判断数组的存储情况,如数组的第一个值a[0]用来存储数组的存储情况,当数组中的值填充一个时,a[0]加一,否则减一。
(2)在对数组进行初始化时,将数组中的每个元素都赋值为一样的值如0,则判断0的位置就可以得到数组的使用情况。再判断数组是否为空。
2.如何判断数组为空?
可以参加下面这篇博客
要明确用 new 创建的数组都是包含默认值的
http://www.cocoachina.com/cms/wap.php?action=article&id=54251
3.如何将两个数组合并为一个数组
system.arraycopy()
static String[] concat(String[] a, String[] b) {
String[] c= new String[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
4.数组作为方法参数
数组作为方法参数时需要加一个值:static,传递的是数组的内存地址
public static void printArray(int[] arr) {
System.out.println("2位置: " + arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
5.如何将数组作为返回值类型
返回的是数组的内存地址
public static int[] getArray(int[] arr) {
arr =new int[]{ 1, 3, 5, 7, 9 };
//返回数组的地址,返回到调用者
return arr;
}
还有其他的方法也可以实现该功能。。
6.如何判断数组中某个位置没有元素
可以使用integer类型创建数组,其值默认为null 我们在判断int类型的值是否为空时只需要比较integer相对位置是否为空即可。也可以直接使用integer类型来创建数组。该类型是int类型的包装类。
实现简单的增删查改
具体的操作过程和思路都写在代码注释中了
//合并两个数组
public static int[] concat(int[] a, int[] b) {
int[] c= new int[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
//自动扩容 数组的第一个元素存放数组的元素个数
public static int[] addsize(int[] arr) {
//判断数组是否满了 满了的数组再将容量扩大一倍
if(arr[0]+1==arr.length) {
arr = concat(arr,arr);
}
for(int i=arr[0]+1;i<arr.length;i++) {
arr[i]=0;
}
return arr;
}
//增加一个新的元素
public static int[] add(int[] arr,int num) {
//判断数组是否满了 满了就扩容 否则 执行下一步
if(arr[0]+1==arr.length) {
arr = addsize(arr);
}
//给数组增加新的元素
arr[arr[0]+1] = num;
arr[0]=arr[0]+1;
return arr;
}
//删除一个数组中的元素
public static int[] delet(int[] arr,int num) {
//删除数组中的最后一个值
if(num==0) {
arr[arr[0]]=0;
arr[0] = arr[0]-1;
}else {//删除包含该值的数组值
for (int i = 1; i < arr.length; i++) {
if(arr[i] == num) {
for (int j = i; j < arr.length-1; j++) {
arr[j]=arr[j+1];
}
arr[0]=arr[0]-1;
}
}
}
return arr;
}
//查找一个数组中的元素
public static int[] find(int[] arr,int num) {
//定义一个数组存放arr中和num相同的值的下标 并在index【0】中存放个数
int[] index = new int[arr[0]+1];
int s = 0;
for (int i = 1; i < arr.length; i++) {
if(arr[i]==num) {
s++;
index[s]=i;
}
}
index[0]=s;
return index;
}
//修改一个数组中的元素
public static int[] remake(int[] arr,int num,int newnum) {
//把数组中的num值修改为newnum
for (int i = 0; i < arr.length; i++) {
if(arr[i]==num) {
arr[i]=newnum;
}
}
return arr;
}