数组的简单使用

01_数组

如何创建数组和如何使用数组使我们对数组的基本操作

package com.qr.tztz;

/**
* 数组:
*
*  面向对象:
*      一切行为都是对象的
*/
public class ArrayStudy {
   public static void main(String[] args) {
       //存放10个int类型的数据
       int[] ints = new int[10];
       //Integer[] intss = new Integer[10];
       //设置值
       ints[0] = 1;
       //获取值
       //System.out.println(ints[0]);

       //数组的静态初始化,long
       Long[] longss = {Long.valueOf(6531443), Long.valueOf(431),Long.valueOf(6143543),Long.valueOf(3423)};

       long[] longs = {3414,31,43,412,4312,34312,3,431,3,341};

       //默认的构造方法创建
       MyArray myArray = new MyArray();
       myArray.insert(32);
       myArray.insert(322);
       myArray.insert(32333);
       myArray.insert(32333);
       myArray.insert(32333435);
       myArray.insert(21132333);
       myArray.showArr();
       long l = myArray.searchData(32323);
       System.out.println(l);
       long l1 = myArray.searchData(322);
       System.out.println(l1);

       System.out.println("----------------------------------");
       myArray.deleteIndex(2);
       myArray.showArr();
//        myArray.deleteIndex(5);

       System.out.println("===================================");
       myArray.deleteData(21132333);
       myArray.showArr();

       System.out.println("----------------穷人---------------");
       //修改32的值为132,方法有问题,索引越界.
       myArray.update(322,132);
       myArray.showArr();

       System.out.println("----------------穷人---------------");
       //直接传入索引进行修改
       myArray.change(0,132);
       myArray.showArr();

   }
}
/**
*
*/
class MyArray{
   //数组没有初始化之前的值为null
   private long[] arr;
   //表示有效数据有多少,int类型的初始化之前的类型为0
   private int elements;

   public MyArray(){
       //初始化数组的大小
       arr = new long[20];
   }

   //有参构造方法初始化数组
   public MyArray(int maxSize){
       arr = new long[maxSize];
   }

   /*
       添加数据
       接收一个需要插入的数
    */
   public void insert(int value){
       //首先数组的第一个元素为这个value
       arr[elements] = value;
       //然后这个elements进行累加
       elements++;
   }

   /*
       显示数组中的元素
    */
   public void showArr(){
       System.out.print("[");
       for (int i = 0; i < arr.length; i++){
           if (i == arr.length-1){
               System.out.println(arr[i]+"]");
           }else{
               System.out.printf(arr[i]+", ");
           }
       }
   }

   /*
      查找数据
           根据指定的值来进行查找
    */
   public int searchData(long value){
       //根据值进行查询
       int i;
       for (i = 0; i < elements; i++) {
           if(value == arr[i]){
               break;
           }
       }
       //遍历完还没找到
       if (i == elements){
           System.out.println("数据查找不到");
           //就是没有查找到
           return -1;
       }else {
           //
           return i;
       }
   }

   /*
       根据索引来进行查找
    */
   public long searchIndex(int index){
       if(index<0 || index >= arr.length){
           //抛出异常需要new,这个千万不要犯错,丢人
           throw new ArrayIndexOutOfBoundsException("数组索引越界");
       }else {
           //根据索引来的话,直接返回这个索引对应的数据就可以了.
           return arr[index];
       }
   }

   /*
       删除数据,也是需要根据索引来进行删除
       数组删除元素的步骤:
           初始化数组:3,4,5,6,7 (0,1,2,3,4)
           删除:4(1)
           那么:3,5,6,7 (0,1,2,3)
           数组长度:elements - 1
    */
   public void deleteIndex(int index){
       if(index >= elements || index < 0){
           throw new ArrayIndexOutOfBoundsException("数组索引越界");
       }else{
           //删除
           for (int i = index; i < elements; i++) {
               arr[i] = arr[i+1];
           }
           elements--;
       }
   }


   /*
       根据传入的值进行删除
    */
   public void deleteData(long data){
       for (int i = 0; i < elements; i++) {
           if (data == arr[i]){
               //调用根据索引删除元素的方法
               deleteIndex(i);
           }
       }
   }


   /*
       修改数组中的元素,根据传入的数数据进行修改
       找到值,进入重新赋值
           upBefor:修改前
           upAfter:修改后
       有问题:
    */
   public void update(long upBefor,long upAfter){
       for (int i = 0; i < elements; i++) {
           //找到值,返回的是一个下标
           int upbIndex = searchData(upBefor);
           if (upbIndex < 0 || upbIndex >= elements){
               return;
           }
           //修改值
           arr[upbIndex] = upAfter;
       }
   }

   /*
       跟定下标,然后再修改
    */
   public void change(int index,int newData){
       if(index >= elements || index < 0){
           throw new ArrayIndexOutOfBoundsException("越界");
       }
       //赋值
       arr[index] = newData;
   }
}

操作有序数组

插入需要有序

/*
   添加数据
   接收一个需要插入的数
*/
public void insert(int value){
   int i;
   //判断
   for (i = 0; i < elements; i++) {
       if(arr[i] > value){
           break;
       }
   }

   //循环完成,找到对应的位置
   for (int j = elements; j > i; j--) {
       arr[j] = arr[j-1];
   }
   arr[i] = value;
   elements++;

}

二分查找元素

使用二分查找定位数据

/*
   使用二分法进行查询数组中的元素
   使用前提是这个数组必须是一个有序的数组
   因为是从中间切分开,先进行一次判断,然后再进行查找
*/
public int erfenSearch(long data){
   int mid = 0;
   int low = 0;
   int pow = elements;
   while (true){
       mid = (low + pow) /2;
       //判断在哪边
       if(arr[mid] == data){
           return mid;
       } else if(low > pow){
           return -1;//找不到了
       } else{
           //中间的数大于左边的数,往左边找
           if (arr[mid] > data){
               pow = mid -1;
           }else {
               //往右边找
               low = mid + 1;
           }
       }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值