线性结构---数组

数组的使用

定于数组最常用的两种方法

int[] arr = new int[3];
int[] arr = new int[]{1,2,3};

我们会发现长度都是不可变的,如何解决这个问题呢?

如何给长度为3的饱和数组中再添加一个元素呢?? 仔细想想,我们可以这样做

public static void main(String[] args) {
        int arr[] = new int[]{1,2,3};
        System.out.println(Arrays.toString(arr));
        int dst = 4;
        //创建一个新的数组,长度是原数组长度+1
        int arr1[] = new int[arr.length+1];
        //把原数组中的数据全部复制到新数组中
        for (int i = 0; i < arr.length; i++) {
            arr1[i] = arr[i];
        }
        //把目标元素放入新数组最后
        arr1[3] = dst;
        //新数组替换原数组
        arr = arr1;
        System.out.println(Arrays.toString(arr));
    }

如何 删除数组中的元素呢?

 public static void main(String[] args) {
        int arr[] = new int[]{9,8,7,6,5,4};
        System.out.println(Arrays.toString(arr));
        //要删除元素的下标
        int dst = 3;
        //创建一个新的数组
        int arr1[] = new int[arr.length-1];
        //复制原数组中除了要删除元素以外的所有元素
        for (int i = 0; i < arr1.length ; i++) {
            if(i<dst) {
                arr1[i] = arr[i];
            }else {
                arr1[i] = arr[i + 1];
            }
        }
        //新数组替换旧数组
        arr = arr1;
        System.out.println(Arrays.toString(arr));
    }

我们会发现,上面写的向数组中添加元素或者删除元素太麻烦啦。。想要简单的的对数组元素进行添加、删除、插入、取出等操作,我们引入了面向对象的数组

数组的查找算法

数组的查找算法分为线性查找二分查找

1、线性查找 :就是把需要查找的元素和数组中的元素依次对比。如果找到了,返回数组元素下标,要是找不到就返回-1。挨个查找,效率比较低。

2、二分查找:把数组切成两半,从中间开始找,如果不是转换下标。注意前提是:数组必须是有序数组。

public static void main(String[] args) {
      int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
      int target = 9;
      int left = 0;
      int right = arr.length-1;
      while (true) {
          int mid = (left+right)/2;
          if(arr[mid] > target) {
              //在tmp左侧
              right = mid-1;
          } else if(arr[mid] < target) {
              //在tmp右侧
              left = mid+1;
          } else {
              System.out.println(mid);
              break;
          }
        //若左边元素下标已经大于等于右边元素下标时还没有跳出循环,说明找不到此元素
          if(left >= right) {
              System.out.println("无此元素");
              break;
          }
      }
    }

。。。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值