1.5 Java之数组

目录

数组

一维数组

初始化的两种方式

数组长度

数组元素默认值

数组的内存结构

一维数组练习

多维数组

多维数组静态初始化

二维数组的内存结构1

二维数组长度

二维数组内存结构2

数组异常类型

数组练习

打印杨辉三角

常见数组算法实现

数组元素排序

冒泡排序

直接选择排序


数组

  • 数组元素可以是任何数据类型,包括基本数据类型和引用数据类型(一维数组,二维数组)
  • 数组属于引用数据类型,数组类型的变量是对象(object),数组中的每个元素相当于该对象的成员变量

一维数组

声明方式:

type  var[] 或 type[]  var;


初始化的两种方式

1)动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行

int[] arr = new int[3];

arr[0] = 3;

arr[1] = 9;

arr[2] = 8;


MyDate dates[];

dates = new MyDate[3];

dates[0] = new MyDate(22, 7, 1964);

dates[1] = new MyDate(1, 1, 2000);

dates[2] = new MyDate(22, 12, 1964);


2)静态初始化:在初始化数组的同时为数组元素赋值
 

int a[] = new int[]{ 3, 9, 8};

int a[] = {3,9,8};

//int a[];a = {3,9,8}; error


MyDate dates[] = {

        new MyDate(22, 7, 1964);

        new MyDate(1, 1, 2000);

        new MyDate(22, 12, 1964);
}


数组长度

  • 数组名.length
  • 数组一旦初始化,长度就不可变
  • 长度不够 只能重新创建数组,把原数组值复制过来


数组元素默认值

数组元素为不同数据类型时,数组创建时的默认值(属性默认值)

可理解为未给数组元素显式赋值时的值

 

  • 对于int,byte,short,long,其默认值为0
  • 对于float,double,其默认值为0.0
  • 对于char,其默认值为空格
  • 对于boolean类型,其默认值为false
  • 对于引用数据类型,其默认值为null(如String)

数组的内存结构

 

静态域:静态变量

方法区:类名,包名,方法的定义

常量池:字符串常量池

 

关注栈先进后出,数组元素首地址值

 

S1:在栈上创建引用类型变量并指向对应位置

   在堆上开辟对应数量空间,赋default值(一定会有该过程)

S2:数组元素显式赋值


一维数组练习

1)

定义类Pritimive,在类中定义一个有3个元素的boolean类型的

数组t作为其成员变量。数组元素未赋值。

定义类Array1,在Array1的main()方法中创建Pritimive对象d,

输出其成员变量t的三个元素值。

练习目的:检验基本数据类型数组创建时的自动赋值。

给对象d的成员变量t赋值为{true,true,true},并输出t的三个

元素值。


2)


多维数组

 

int[][] a = new int [3][2];

等价于

int[] a[] = new int [3][2];

关注二维数组的列的size可不统一

多维数组静态初始化


二维数组的内存结构1

 

数组为引用数据类型

 

两维数组的元素为一维数组

 

 

左图确定一维数组元素个数,右图一维数组元素个数可变

 


二维数组长度

 

int[][] a = new int [3][2];

a.length//二维数组长度为行数,即3

a[0].length//二维数组某个元素的长度,即2

 

遍历二维数组并求和(嵌套循环)

int sum = 0;

for(m = 0;m<a.length;m++){

  for(n = 0;n<a[m].length;n++){

     sop(a[m][n]+" ");

     sum += a[m][n];

  }

  sopl();//换行

}


二维数组内存结构2

 

 

 

动态初始化

 

第一行:栈空间创建引用类型变量并赋值,堆空间二维数组元素初始化为null(元素为一维数组,即引用数据类型,默认为null)  【new出来都在堆空间】

 

第二行:堆空间另外开辟区域,创建一维数组,元素默认值为0(int类型),二维数组元素指向一维数组的首地址值

 


数组异常类型

 

 

数组练习

 

声明:int[] x,y[];  以下选项允许通过编译的是:

 

a )   x[0] = y;  //no

b)    y[0] = x; //yes

c)    y[0][0] = x;//no

d)    x[0][0] = y;//no

e)    y[0][0] = x[0];//yes
 

f)    x = y; //no

 

一维数组:int[] x  或者int x[] 

 

二维数组:int[][] y 或者  int[] y[]  或者 int  y[][]

 

int[] x,y[];//x为一维数组,int[]x

               //y为二维数组,int[]y[]


打印杨辉三角

 

使用二维数组打印一个 10 行杨辉三角.

1
1 1
1 2 1
1 3 3  1
1 4 6  4  1
1 5 10 10 5 1
 ....
 
【提示】
 1. 第一行有 1 个元素, 第 n 行有 n 个元素
 2. 每一行的第一个元素和最后一个元素都是 1
 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素.

    yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];

 

 

 


常见数组算法实现

1.求数组元素的最大值、最小值、平均数、总和等

2.数组的复制、反转

3.数组元素的排序
 


 

 

 

如上图,反转的两种写法

 


数组元素排序

 

数据特点(数据量,乱序程度)决定数组排序方式

 

举例来书写一般的迭代条件


冒泡排序

 


直接选择排序

 

改进(每次内循环只交换一次)

现成方法:

附录

syso(main)+Alt+/:快捷键

Ctrl+shift+F:格式

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值