Java练习笔记(4)——用数组实现简单数据结构

需要做的准备

首先需要搞搞清楚以下问题:
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;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值