轩辕编程(Java第五讲):Java数组

本文详细介绍了Java中的数组概念,包括数组的定义、静态和动态初始化、地址值、元素访问、遍历方式以及Java内存分配原理,特别关注了二维数组的静态化和动态初始化方法。
摘要由CSDN通过智能技术生成

数组

  • 什么是数组
  • 数组的定义
  • 数组的静态初始化
  • 数组的地址值
  • 数组元素访问
  • 数组遍历
  • 数组动态初始化
  • Java内存分配
  • 二维数组

什么是数组:

一种容器,存储同种数据类型的多个值

Java的数组是引用数据类型,数组元素的数据类型既可以是基本数据类型,也可以是引用数据类型

Jva的数组都是动态数组,在声明数组变量后,使用new运算符申请数组的存储空间

数组的定义

  1. 数据类型[]数组名(一般都写这种)
  2. 数据类型 数组名[]
    如: int[]array;
    这里有一点注意的,就是C语言中我们习惯[]放在数组名后,但是在java中更习惯[]放在数组名前

但若像C语言那样的写法,也行,但需注意两种写法的不同点

int x[],i=0; //i是int变量
int [] x,i; //i是int[]变量

数组的静态初始化

完整格式:

数据类型[]数组名=new 数据类型[]{ 元素1,元素2…}
如: int []array=new int[]{11,22,33};

简写:

数据类型[]数组名={元素1,元素2…};
如: int[]arr={11,22,33};

数组的地址值

数组名代表的就是数组的地址值

[D@6576fe71

其中

[表示是个数组,

D表示类型为double

@为间隔符号,无实际含义

6576fe71是真正的地址值

数组元素访问

数组名[索引],索引从0开始.也叫做下标,角标

  1. 存数据
  2. 获取数据

数组长度

Java 语言自动为每个数组变量提供 length 属性表示数组占用的存储单元个数。使用点运算符获得数组长度的语法格式如下:数组变量.length
例如:arr.length表示arr数组的长度

数组遍历

用循环遍历数组

 int []arr={1,2,3,4,5};
 for(int i=0;i<arr.length;i++){
           System.out.println(arr[i]);
}

自动的快速生成数组的遍历(idea提供的)

数组名.fori 会自动补全遍历

for语句作用于数组的逐元循环,也俗称增强for

Java自JDK5开始支持for语句作用于数组的逐元循环(for each loop),语法格式如下:for(类型 变量:数组)
其中,“类型”是“数组”的元素类型,“类型”的“变量”获得“数组”的每个元素。

故,循环遍历数组也可以写成

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        for (int j : arr) {
            System.out.println(j);
        }
     
    }
}

数组动态初始化

数据类型 [] 数组名=new 数据类型[数组长度];
如:int[]arr=new int [3];
这里有点注意:这里的3可以更换成任何一个变量,在C语言中,数组长度不支持变量,但是在java中允许
动态初始化时,虚拟机会给出默认的初始值

  • 整数类型:0

  • 小数类型:0.0

  • 字符类型:‘/u0000’ 空格

  • 布尔类型:false

  • 引用数据类型:null

补充一个小知识点: System.out.print(count);不会换行

Java内存分配

  • 栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行
  • 堆 存储对象或者数组,new来创建的,都存储在堆内存
  • 方法区 存储可以运行的class文件
  • 本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关
  • 寄存器 给CPU使用过,和我们开发无关

二维数组

二维数组静态化格式

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

简写::数据类型[][] 数组名={{元素1,元素2,…},{元素1,元素2,…}}

但是建议写成以下格式(每个一维数组写到一行)

如:

int[][] arr ={
        {1,2,3},
        {4,5,6,7,8}
};
获取元素

arr[x][y]

遍历
public class Main {
    public static void main(String[] args) {
        int[][]arr={
            {1,2,3},
            {4,5,6}
        };
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0;  j< arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println("");
        }
    }

}       
二维数组的动态初始化

格式:数据类型[][]数组名=new 数据类型[m][n];
例如:int [][]arr=new int[3][5];

不规则的二维数组

由于二维数组mat中每个一维数组mat[0]、mat[1]等是分散存储的,因此各一维数组mat[0]、mat[1]等占用存储空间容量可不相同,可分别申请。
例如:
int mat[][]=new int[3][];//申请第一维的存储空间
mat[0]= new int[3];//申请第二维的存储空间
mat[1]=new int[4];

习题:
1.反转整型数组,例如,数组中原来是{1,9,8,1,0,3,2,7},变成{7,2,3,0,1,8,9,1}
2.打乱整型数组,需用到Random类(在第四节课后习题里有例题)
3.叶奶奶书上的例题:幻方.可以只写出奇数阶幻方
n阶幻方(MagicSquare)是指将自然数1~n²排列成n * n阶方阵,其各行、各列及两条对角线上的数值之和相等
例如:
8 1 6
3 5 7
4 9 2
对于奇数阶幻方,有一种方法为连续摆数法(可参考上面这个3 * 3的奇数阶方法来理解下面的方法):
①约定初始位置是第0行中间,放置1。
②向当前位置的右上方顺序放置下一个数,如5、6;若下一个位置超出数组下标范围,则将幻方阵沿行、列方向看成环形,下标再从0开始计数,如2、3。
③若当前放置数是n的倍数,表示一条对角线已满,则下一个012S位置是本列下一行,如4、7。

  • 55
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值