03、数组&内存划分

1、数组

  (1)概念

      *同一种类型数据的集合,其实数组就是一个容器。

  (2)特点

      *数组会自动对其内部的元素从0开始编号

  (3)格式

      *格式1

      元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

      该格式用于还不明确数组的具体数据

      示例:

        **int[] arr = new int[6];

      *格式2

      元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3...};

      该格式用于数组已明确存储的数据

      示例:

        **int[] arr = new int[]{12,34,24,56,74,};

        **int[] arr = {334,45,22,4,646,7};

      注意:

          该类型{}内已明确元素个数,故[]内不要再输入

  (4)怎么用

    用数组来存储一组同类型的数据,可以通过对其角标的操作使用数组元素。

    数组元素是存储在堆中的,数组名仅仅只是指向数组的地址,在调用函数时,对数组的操作结果不需要返回值,因为在对数组操作时,其内部已经改变。

    对数组最基本的动作就是存与取;其核心思想是对角标的操作

  (5)什么时候要用数组

    如果数据出现了对应关系,而且对应关系的一方是有序的数字编号。这些数字可作为角标使用,这时,就必须想到数组的使用。

    对很多同类数据进行使用时,用数组要比较方便

    数据只要一多,尽量使用数组

  (6)数组自带测试长度的命令:length

    示例:

        int[] arr = new int[8];

        arr.length 其值为8

  (7)常见操作

    *获取最值(最大值,最小值)

    *排序(冒泡排序,选择排序)

      冒泡排序,例:从大到小排序

public static void bubbleSort(int[] arr){

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

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

            if (arr[y]<arr[y+1]){

                swap(arr,y,y+1);

            }

        }

    }

    return ;

}        

 

 

      选择排序,例:从小到大排序

public static void selectSort(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]){

                swap(arr,x,y);

            }

        }

    }

     return ;

}

 

 

    *折半查找(二分查找)

      折半查找法

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

    int min =0;

    int max = arr.length-1;

    int mid = (min + max)>>1;

    while (arr[mid]!=key){

        if (arr[mid] > key){

            max = mid-1;

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

            min = mid +1;

        }

        if (min>max){

            return -1;

        }

        mid = (min + max)>>1;
    
    }

    return mid;

}    

 

 
 

  数组索引越界:

    当访问到数组中不存在的角标,就会发生异常,错误:ArrayIndexOutOfBoundsException

    当引用型变量没有任何实体指向时,还在用其操作实体。会发生的异常:NullPointerException

    出现错误:[I@c0786   @号前面的'['指数组 'I'值int型

 

2、二维数组

  (1)定义格式

    两种:

        格式一:int[][] arr = new int[3][2];

        格式二:int[][] arr = new int[3][];

        格式三:int[][] arr = {{3,6,7},{12,5},{1,4,6,3}};

  应用:

      数据多了用数组存,数组多了用数组存

  二维数组图解:

 
 
 

3、内存的划分:

  1、寄存器

  2、本地方法区;

  3、方法区

  4、栈内存

    存储的都是局部变量。

    而且变量所属的作用域一旦结束,该变量就自动释放。

    特点:先进放栈底,先进后出(例子:弹夹)

       局部代码块。用于限定局部变量的生命周期

   5、堆内存

    存储的是数组和对象(其实数组就是对象)凡是new建立都在堆中。

    特点:

      1、每一个实体都有首地址值

      2、堆内存中的每一个变量都有默认的初始化值,根据类型的不同而不同。

           整数是0,小数0.0或者0.0f,boolean 是false ,char 是'u00000'

      3、垃圾回收机制(C++和java区别,java有垃圾自动回收机制,C++得手动回收)

           null能取消引用型数据的指向,但堆中数据仍存在。

 

 

原文地址:https://www.cnblogs.com/zyh-blog/p/3162320.html