1.5 J2SE基础知识复习之数组
目录
数组
- 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
- 数组属引用类型,数组型数据是对象(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];
多维数组静态初始化
二维数组的内存结构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:格式
如上图,反转的两种写法
数组元素排序
数据特点(数据量,乱序程度)决定数组排序方式
举例来书写一般的迭代条件
冒泡排序
直接选择排序
改进(每次内循环只交换一次)
现成方法: