8.数组

1. 数组的概念

  同一种类型数据的集合。其实数组就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素, 数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。

 

2. 数组的格式

  1)声明并给长度(前提时知道数据个数)

    int[] a = new int[3];

  2)声明但不给长度(不知道数据个数情况下)

    int[] a ;

  3)边声明边赋值

    Int[] a = {1,2,3...};

3. 数组的遍历(for)

public static void main(String[] args) {

  int[] x = { 1, 2, 3 };

  for (int y = 0; y < x.length; y++) {

    System.out.println(x[y]);

    // System.out.println("x["+y+"]="+x[y]); 打印效果 x[0]=1;

  } // 那么这就是数组的第一个常见操作.遍历

}

 

4. 数组的内存分析

 

  1)案例分析一:

 

    

    注意:0x999为内存地址,arr存储的时内存地址,而不是具体的数值

 

  2)案例分析二:

    假如有2个数组 a和b

 

    Int[] a = b;  //这个实际上是把b的内存地址给a了,而不是把b的值给a了

    

 

5. 数组常见操作

  1)直接排序

    原理:第一轮,比较每个元素之间的大小,把最大的排在第一个。

    第二轮:比较除了第一个以外的每个值大小,把最大的放在第二位

    ...

    代码:

    public static void selectSort(int[] arr){

      for(int x=0; x<arr.length-1; x++){

        //为什么y的初始化值是 x+1? 因为每一次比较,都用x角标上的元素和下一个元素进 行比较

        for(int y=x+1; y<arr.length; y++){

          if(arr[x]>arr[y]){

            int temp = arr[x];

            arr[x] = arr[y];

            arr[y] = temp;

          }

        }

      }

     }

 

  2)冒泡排序

    原理:比较相邻两个元素进行比较。如果满足条件就进行位置置换

    public static void bubbleSort(int[] arr){

      //-x:让每次参与比较的元素减-1:避免角标越界。

      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]){

          int temp = arr[y];

          arr[y] = arr[y+1];

          arr[y+1] = temp;

          }

        }

      }

    }

 

  3)折半查找(二分法)

    原理:让一个数跟数组的中间索引数进行比较(数组必须先拍好序),大就查找中间索引右边的值(默认从小到大排序)然后重复上面的步骤,指导找到

    例如: 

      public static int halfSeach(int[] arr,int key){

        int min,mid,max;

        min = 0;

        max = arr.length-1;

        mid = (max+min)/2;

        while(arr[mid]!=key){

          if(key>arr[mid]){

            min = mid + 1;

          }else if(key<arr[mid]){

            max = mid - 1;  

            if(min>max)

            return -1;

            mid = (max+min)/2;

          }

          return mid;

       }

  4)数组翻转

  5)上面都是自己定义的一些方法,其实因为这些操作都是常用的功能,所以都进行了预定义了

    toString()       输出数组

    sort()         给指定数组排序

 

 

 

6. 二维数组 

  1) 语法

    int[] a = new int[3][4];

    int[] a = {{1,2,3,4,5},{6,7,8,9},{10,11,12,13}};

  2)内存分析

    

 

 

 

原文地址:https://www.cnblogs.com/zjdbk/p/8877269.html