zoukankan      html  css  js  c++  java
  • 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能取消引用型数据的指向,但堆中数据仍存在。

     

     

  • 相关阅读:
    Linux 升级make (gmake)
    C库函数-calloc()
    redis若干命令 中文翻译
    centos7 安装xinetd,telnet
    vim 显示行号
    重启redis
    TS 过滤 .meta文件
    TS 判断为空
    TS 聚合查询 读取MongoDB
    windows 编译libuv库.txt
  • 原文地址:https://www.cnblogs.com/zyh-blog/p/3162320.html
Copyright © 2011-2022 走看看