zoukankan      html  css  js  c++  java
  • 数组、栈、堆(java基础知识五)

    1.数组概述、定义格式

    * A:数组概念
        数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
        数组既可以存储基本数据类型,也可以存储引用数据类型。
    * B:数组定义格式
        格式1:数据类型[] 数组名;----int[] arr;
        格式2:数据类型 数组名[];----int arr[];
    * C:数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致,

    2.数组初始化、动态初始化

    * A:什么是数组的初始化
        Java中的数组必须先初始化,然后才能使用。
         所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
    * B:如何对数组进行初始化
        * a:动态初始化 -- 只指定长度,由系统给出初始化值
        * 格式:
            数据类型[] 数组名 = new 数据类型[5];
        * int[] arr = new int[3];
          解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
        * b:静态初始化 -- 给出初始化值,由系统决定长度
        * 格式:
            数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
        * 初始化时指定每个数组元素的初始值,由系统决定数组长度。
        * int[] arr = {1,2,3,4,5,6,7,8,9,0};    
    * C:动态初始化的格式:
        * 数据类型[] 数组名 = new 数据类型[数组长度];
        * 数组长度其实就是数组中元素的个数。
    * D:案例演示
        * 对数组的解释
        * 输出数组名称和数组元素
    * E:数组的长度格式
        * 数组名.length  

    3.java内存分配,栈、堆区别

    * A:栈---存储局部变量,
    * B:堆---储存new出来的东西,在堆内new出来的对象都有初始化值。
    * C:方法区
    * D:本地方法区
    * E:寄存器
    
            1:局部变量
                a:方法定义中或者方法声明上(例如:形参)的所有变量
                b:使用完毕,立即消失
            2:new出来的东西---------实体,对象。
                new int[3];
                a:每一个实体都有首地址值
                b:每一个实体内的数据都有默认值
                byte,short,int,long --------0
                float,double -----------------0.0
                char ‘u0000’----------------Unicode编码,0为十六进制的数
                boolean false
                引用类型:null
            c:使用完毕后,会被垃圾回收器空闲的时候回收。

    4.数组静态初始化

    * A:静态初始化的格式:
        * 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
        * 简化格式:
            * 数据类型[] 数组名 = {元素1,元素2,…};

    5.数组操作的两个常见小问题越界和空指针

    * a:ArrayIndexOutOfBoundsException:数组索引越界异常
        * 原因:你访问了不存在的索引。
    * b:NullPointerException:空指针异常
        * 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

    6.数组演示操作

    数组遍历:就是依次输出数组中的每一个元素。
            int[] arr={1,2,3,4,5,6,7,8};
            for(int x=0;x<arr.length;x++){
                System.out.println(arr[x]);
            }
    数组获取最值(获取数组中的最大值最小值)
            public static int getMax(int[] arr){
                int[] arr={1,2,3,4,5,6,7,8};
                int max=arr[0];
                for(int x=1;x<arr.length;x++){
                    if(max<arr[x]){
                        max=arr[x];
                    }
                }
                System.out.println(max);
            }
    数组元素反转(倒序有俩种方法)(就是把元素对调)
            1.public static void niXu(){
                int[] arr={1,2,3,4,5,6,7,8};
                for(int start=0,end=arr.length-1;start<end;start++,end--){
                    int temp=arr[start];
                    arr[start]=arr[end];
                    arr[end]=temp;
                } 
            }
            2.public static void niXu2(){
                int[] arr={1,2,3,4,5,6,7,8};
                for(int x=0;x<arr.length/2;x++){
                    int temp=arr[x];
                    arr[x]=arr[arr.length-1-x];
                    arr[arr.length-1-x]=temp;
                }
            }
    数组查表法(根据键盘录入索引,查找对应星期)
            import java.util.Scanner;
            class DemoChaBiao {
            public static void main(String[] args) {
            /*
            需求:
            数组查表法(根据键盘录入索引,查找对应星期)
            分析:
            从键盘输入一个数,
            */
            //创建对象
                Scanner sc = new Scanner(System.in);
            //键盘录入一个数
                int x=sc.nextInt();
            //定义一个char类型的数组
                char[] arr={' ','一','二','三','四','五','六','日'};
                char c=getWeek(x,arr);
                System.out.println(c);
                System.out.println("Hello World!");
                }
            //定义返回星期几字符方法,返回值类型char,参数列表int x,char[] arr
            public static char getWeek(int x,char[] arr){
                    char c = arr[x];
                    return c;
                    }
            }
    数组元素查找(查找指定元素第一次在数组中出现的索引)
            import java.util.Scanner;
            class DemoIsEquals {
            public static void main(String[] args) {
            /*
            需求:
            数组元素查找(查找指定元素第一次在数组中出现的索引)
            分析:
            1.元素的遍历,
            2.比较数组元素与给出的值是否相等
            3.输出
            */
                int[] arr={1,2,3,4,5,6};
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();
                int b=isEquals(x,arr);
                System.out.println(b);
    
                System.out.println("Hello World!");
                }
            //定义方法,返回值类型boolean,参数列表 int x ,int[]arr
            public static int isEquals(int x,int[] arr){
            //for循环用来遍历和比较,看是否满足数组元素的值是否与输入的数据相等,相等返回索引,不相等返回-1
                for (int i= 0 ;i<arr.length ;i++ ) {
                    if (x==arr[i]) {
                        return i;
                        }
                    }
                return -1;
                }
            }

    7.二维数组的概述及其格式

    * A:二维数组概述
    * B:二维数组格式1
        * 数据类型[][] 数组名 = new 数据类型[m][n];
        * int[][] arr= new int[m][n];
    * C:二维数组格式1的解释
        *这是一个二维数组,它里面有m个一维数组,每一个一维数组中都有n个元素, 
    * D:注意事项
        * a:以下格式也可以表示二维数组
            * 1:数据类型 数组名[][] = new 数据类型[m][n];
            * 2:数据类型[] 数组名[] = new 数据类型[m][n];
        * B:注意下面定义的区别
                int x;
                int y;
                int x,y;
                
                int[] x;
                int[] y[];
                
                int[] x,y[];
    * A:二维数组格式2
        * 数据类型[][] 数组名 = new 数据类型[m][];
        * int[][] arr = new int[3][];
        * arr[0] = new int[2];
        * arr[1] = new int[3]
        * arr[2] = new int[1];
    * A:二维数组格式3
        *    数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
        *   简化版格式:
        *   数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

    8.二维数组演示

    需求:二维数组遍历
            int[][] arr={{1,2,3,4},{2,3,4,5}};
            for(int x=0;x<arr.length;x++){
                for(int y=0;y<arr.length;y++){
                    System.out.println(arr[x][y]);
                }
            }
    需求:公司年销售额求和
            某公司按照季度和月份统计的数据如下:单位(万元)
            第一季度:22,66,44
            第二季度:77,33,88
            第三季度:25,45,65
            第四季度:11,66,99
            class Demo2Array2 {
            public static void main(String[] args) {
                int[][] arr={{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
                int sum=0;
                for (int x=0;x<arr.length ;x++ ) {
                    for (int y=0;y<arr[x].length ;y++ ) {
                        sum+=arr[x][y];
                        }
                }
                System.out.println(sum);
            
                System.out.println("Hello World!");
            }
    看程序写结果,并画内存图解释
            public static void main(String[] args) {
                int a = 10;
                int b = 20;
                System.out.println("a:"+a+",b:"+b);
                change(a,b);
                System.out.println("a:"+a+",b:"+b);
        
                int[] arr = {1,2,3,4,5};
                change(arr);
                System.out.println(arr[1]);
            }
        
            public static void change(int a,int b) {
                System.out.println("a:"+a+",b:"+b);
                a = b;
                b = a + b;
                System.out.println("a:"+a+",b:"+b);
            }
        
            public static void change(int[] arr) {
                for(int x=0; x<arr.length; x++) {
                    if(arr[x]%2==0) {
                        arr[x]*=2;
                    }
                }
            }
            总结:Java中到底是传值还是传址?
            1,Java中即传值也传址,基本数据类型传的是值,引用数据类型传的是址(地址)
            2,Java中是传值,非传址,因为地址值也是值(高司令支持)
  • 相关阅读:
    iOS开发-NSOperation与GCD区别
    FMDB数据库升级
    Xcode自动选择证书
    asp.net常用函数表
    JS操作文件
    Json转换插件
    SpringCloud分布式事务-Seata
    SpringCloud应对高并发的思路
    SpringCloud-Greenwich版本新特性探索(1)---SpringCloudGateway
    如何热更新线上的Java服务器代码
  • 原文地址:https://www.cnblogs.com/wanghui1316/p/5427382.html
Copyright © 2011-2022 走看看