(19)Java基础 --数组

本文详细介绍了Java中的数组,包括数组的概述、定义与初始化、访问元素、内存图解析、排序算法以及二维数组。通过实例展示了如何动态和静态初始化数组,以及如何访问和排序数组元素。此外,还探讨了数组在内存中的存储方式和计算数组元素地址的公式。最后,文章讲解了二维数组的定义与遍历方法,帮助读者深入理解Java中的数组操作。
摘要由CSDN通过智能技术生成

目录

一、数组的概述

二、数组的定义和初始化

数组的定义

数组的初始化

三、访问数组元素

四、数组内存图

五、数组排序

六、计算元素的地址的公式

七、二维数组


一、数组的概述

数组是存储多个变量(元素)的容器;

这多个变量的数据类型要一样数组既可以存储基本数据类型,也可以存储引用数据类型。

元素都有自己的编号,编号是从0开始的,第一个元素的编号是0,第二个元素的编号1,往后依次加1,最后一个元素的编号是长度减1。

二、数组的定义和初始化

数组的定义

格式1:数据类型[] 数组名;(推荐使用)  如: int[ ] nums ;String[ ] str; SCanner[ ] s; char[ ] c; double[ ] d;

格式2:数据类型 数组名[]; (兼容c语言的格式) 如 int nums[];

以上两种写法,都是只定义了数组,并没有给数组分配内存空间,也没有存储数据。

数组的初始化

所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

注意:Java中的数组必须先初始化,然后才能使用。

1、动态初始化

      格式:

            数据类型[ ] 数组名 = new 数据类型[数组长度];

            如: int[] nums = new int[30] //数组长度其实就是数组中元素的个数。

      动态初始化的数组,没有给数组中赋值过,数组中的元素会使用相应类型的默认值:            

            int类型的元素默认值是0

            double类型的元素默认值是0.0

            String类型的元素默认值是null

            boolean类型的额元素默认值是false

            char 类型的元素默认值是'/u000000',就是空字符

2、静态初始化

      格式:

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

            如: int[] nums = new int[] {1,2,3,4,5};

            或者简化为:

                   int[] nums = {1,2,3,4,5};

三、访问数组元素

索引

      每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)(下标),可以通过数组的索引访问到数组中的元素。

格式

      数组名[索引]

每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度

语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。

索引访问数组中的元素

      数组名[索引]=数值,为数组中的元素赋值

      变量=数组名[索引],获取出数组中的元素

练习:获取数组中的最大值最小值

public static void main(String[] args) {

        int[] aa = {11,12,35,7,10};

        int max = aa[0];    // 假设数组中第一个元素最大
        for (int i = 1; i < aa.length; i++) {
            if (aa[i] > max){
                max = aa[i];
            }
        }
        System.out.println("数组中的最大值是:"+max);

        int min = aa[0];    // 假设数组中第一个元素最小
        for (int i = 1; i < aa.length; i++) {
            if (aa[i] < min){
                min = aa[i];
            }
        }
        System.out.println("数组中的最小值是:"+min);
}

四、数组内存图

1、概念

内存是计算机中的重要原件,可以用来给程序临时存储数据。我们编写的程序,必须放进内存中才能运行,运行完毕后会清空内存。

Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

2、Java的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

JVM的内存划分:

      寄存器,给CPU使用,和我们开发无关。

      本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关。

      方法区:存储可以运行的class文件。

      堆内存:存储对象或者数组,new来创建的,都存储在堆内存。

            int类型的元素默认值是0

            double类型的元素默认值是0.0

            String类型的元素默认值是null

            boolean类型的额元素默认值是false

            char 类型的元素默认值是'/u000000',就是空

方法栈(栈内存):方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

一个数组的内存图

两个数组的内存图

两个变量指向一个数组

五、数组排序

1、排序算法

2、冒泡排序

相邻两个数进行比较,第一波比较后,最大的数在最后。(每比较完之后,后面的数就减少一个比较 )

public static void main(String[] args) {

        int[] aa = new int[]{11, 12, 3, 5, 23, 45, 14};
        /*
            内层循环比较的次数应该越来越少(每次排序后,大数已经沉底,
            下次在比较时不需要再和已经确定位置的元素进行比较)
            减少排序次数 —— n个元素只需要排n-1次
        */
        for (int i = 0; i < aa.length-1; i++) {
            for (int j = 0;j < aa.length-1-i;j++){
                if (aa[j]>aa[j+1]){ // 相邻的两个数据比较 ,满足条件就交换顺序
                    int temp = 0;
                    temp = aa[j];
                    aa[j] = aa[j+1];
                    aa[j+1] = temp;
                }
            }
        }
        for (int i = 0; i < aa.length; i++) {
            System.out.println(aa[i]);
        }
}

练习:求这个日期是这年中的第多少天?

public static void main(String[] args) {
        int year = 2020;
        int month = 12;
        int day = 30;
        int[] ms = {31,28,31,30,31,30,31,31,30,31,30,31};   // 每个月的天数
        // 判断是不是闰年
        if (isRunNian(year)){
            ms[1] = 29;
        }
        int result = 0;
        for (int i = 0; i < month-1; i++) {
            result = result + ms[i];
        }
        result = result + day;
        System.out.println(result);

}

public static boolean isRunNian(int year){
        boolean flag = false;   // 假设不是闰年
        if ((year%4==0 && year%100!=0) || year%400==0){
            flag = true;
        }
        return flag;
}

六、计算元素的地址的公式

七、二维数组

1、定义

二维数组的元素是一个一维数组。

二维数组可以对数据进行分类存储。

动态初始化的格式:

      数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];

静态初始化的格式:

      数据类型[][] 数组名 = new 数据类型[][]{   {一维数组1},  {一维数组2},  {一维数组2}, ... };

2、二维数组的遍历

int[][] aa = {{1,2,3},{4,5,6},{7,8,9},{11,12,13,14}};
		
for(int i=0;i<aa.length;i++){
			
	for(int j=0;j<aa[i].length;j++){	
		System.out.print(aa[i][j]+" ");
	}
			
		System.out.println();
}

上一篇:(18)Java基础 --方法

下一篇:(20)Java基础 --面向对象(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值