黑马程序员_Java基础_05数组数组拷贝、数据常见问题

-------  android培训 ios培训 、期待与您交流! ----------
一、什么是数组以及数组常见操作
数组:同一类型数据的集合。就是一个存储数据的容器。
特点:  可以对数组中的每一个元素进行编号,从0开始;这样方便对数组中的元素进行操作。
通过数组的length属性可以获取到数组的长度。
注意:
定义数组时,必须指定长度。
什么时候使用数组呢?
当参与运算的数据较多时,必须想到先将数据进行临时存储。

对数组容器的常见操作:
 1、对数组进行遍历
 2、获取最的最大或最小值
  public static int getMax(int[] arr)
  {
   int max = 0;
   for(int x=1; x<arr.length; x++)
   {
    if(arr[x]>arr[max])
    max = x;
   }
   return arr[max];
  }
            3、数组排序
  /*
  指定一个位置用该位置上的元素和数组元素进行比较。
  在内循环结束一次,该位置出现最值。
  */
  public static void sort_1(int[] arr)
  {
   for(int x=0; x<arr.length-1; x++)
   {
    for(int y=x+1; y<arr.length; y++)
    {
     if(arr[x]>arr[y])
     {
     
     }
    }
   }
  }
  /*
  相邻两个元素进行比较。
  内循环结束一次,后位出现最值。
  */
  public static void sort_2(int[] arr)
  {
   for(int x=0; x<arr.length-1; x++)
   {
    for(int y=0; y<arr.length-x-1;y++)
    {
     if(arr[y]>arr[y+1])
     {
     
     }
    }
   }
  }
            
             注意事项:y<arr.length-x-1:  -x是为了减少参与比较的元素的个数;  -1是为了避免脚标越界。
  public static void swap(int[] arr,int a,int b)
  {
   //arr[a] = arr[a]^arr[b];
   //arr[b] = arr[a]^arr[b];
   //arr[a] = arr[a]^arr[b];
   
   int temp = arr[a];
   arr[a] = arr[b];
   arr[b] = temp;
   /**/
  }
 
            4、折半查找:前提:必须是有序的数组才有效。 //这个比较经典,值得回顾
  public static int binarySearch(int[] arr,int key)
  {
   int start=0,end=arr.length-1,mid;
   while(start<=end)
   {
    mid = (start+end)>>1;
    if(key>arr[mid])
     start = mid + 1;
    else if(key<arr[mid])
     end = mid - 1;
    else
    return mid;
   }
   return -1;
  }
 
二、多维数组复制:
         多维数组赋值时,先高维后低维,简言之就是从左到右
public class TestMutiArray{
 public static void main(String args[]){
  int[][] a={{1,2,3},{2,3},{3,4,5,8}};
  for(int i=0;i<a.length;i++){  //使用双for循环遍历二维数组并输出打印其值
   for(int j=0;j<a[i].length;j++){
    System.out.println(a[i][j]);
   }
  }
 }
}

三、数组拷贝问题:
public class TestMutiArray{
 public static void main(String args[]){
  int[][] a={{1,2,3},{2,3},{3,4,5,8}};
  for(int i=0;i<a.length;i++){
   for(int j=0;j<a[i].length;j++){
    //System.out.println(a[i][j]);
   }
  }
  //arrayCopy();
  arrayCopy1();
 }
 public static void arrayCopy(){
  int arr[]={1,2,3,4,5};
  int arr1[]=new int[8];
  System.arraycopy(arr,0,arr1,0,arr.length);
  for(int i=0;i<arr1.length;i++){
   System.out.println(arr1[i]);
  }
 }
 public static void arrayCopy1(){
  int[][] a={{1,2},{3,4},{5,6,7}};
  int[][] a1=new int[3][];
  System.arraycopy(a,0,a1,0,a.length);
  a1[2][1]=100 ; ——————①
  System.out.println("被拷贝的数组:"+a[2][1]);
  System.out.println("拷贝的数组:"+a1[2][1]);
 }
}
①这里需要注意的是,这里拷贝的时候,由于拷贝的是数组的引用,所以在更改拷贝的值之后,其实也将原来数组引用的所指向的值改变了, 具体参照下图:



四、 数组中的涉及的其他问题:
 1、数组脚标越界异常。
 2、空指针异常。
 二维数组:可以理解为数组中的数组。
 格式1:int[][] arr = new int[3][];
 System.out.println(arr[0]);//null。是二维数组中第一个一维数组。该数组默认初始化值为null。
 格式2:int[][] arr = new int[3][2];
 System.out.println(arr[0]);//是数组的哈希值。因为二维数组中的小数组被重新初始化为一个数组实体。
 格式3:int[][] arr = {{3,4},{8,1,9}};
  System.out.println(arr.length);//打印二维数组的长度。
  System.out.println(arr[1].length);//打印二维数组中第二个小数组的长度。
 
 二维数组元素求和:其实就是大圈套小圈(使用双for循环可完成)
 int sum = 0;
 for(int x=0; x<arr.length; x++)
 {
  for(int y=0; y<arr[x].length; y++)
  {
   sum = sum + arr[x][y];
  }
 }
 什么时候使用二维数组呢?
 有很多数据。这些数据又有分组。这时可以使用二维数组。
 例如:学生的成绩
 学生甲:80,88,90,86
 学生乙:90,90,70,80
 int[][] arr = {{80,88,90,86},{90,90,70,80}};
 arr就代表总成绩。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值