欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从头开始学Java(六)

程序员文章站 2022-05-23 11:06:57
...

数组

数组的定义和特点

相同数据类型的数据的有序集合即为数组。
数组是引用数据类型,数组的元素可以是任意的数据类型。
数组对象在创建是会在内存中开辟连续的空间,数组名引用的是开辟的连续空间的首地址。
数组的长度在确定后无法进行变更。

数组的声明和初始化

数组在初始化时不能直接在数组中指定数组长度,C语言可以,Java不可以。
int a [5]; 不可以
int a[] = new int [5]; 可以

int [] a;
int a [];
以上两种写法都是正确的

数组元素的调用

通过指定数组下标的方式来调用指定位置的元素。
数组元素的起始位置是0,不是1。
调用的数组下标不能超出数组的最大索引。

数组的长度与遍历

数组名.length

遍历
例:
int array[] = new int [100];
for (int i = 0;i < array.length;i++){
System.out.println(array[i]);
}

数组元素的默认初始化值

byte、short、int、long:0
float、double:0.0
char:’ '。ASCII码值为0的字符
boolean:false
引用数据类型:null

多维数组

多维数组是一种嵌套的数组结构
相当于是每一层指向下一层的结构。
int array [a][b][c];
从头开始学Java(六)
这里的a=4,b=2,c=8
int array[2][4][8];
4 * 2 * 8 = 64

实际上
多维数组不一定需要嵌套一样的结构。它的子结构可以统一。
int array [][][] = new int [3][][];
array[0] = new int [2][9];
array[1] = new int [3][5];
array[2] = new int [4][7];

这样的也是可以的。
这里array是地址,array[0]是地址,array[0][0]是地址,array[0][0][0]存放了一个明确的数据。通过不停指向嵌套的数组的首地址最终达到最里层访问数据。
多维数组的长度也是这样获取的
array[0].length
array[0][0].length
array[0][0][0].length

如上结构的多维数组的最终展示结果将以随机给多维数组赋值并遍历的方式呈现。
如下是实现代码:

public class MultidimensionalArray {
	public static void main(String[] args) {
		int array_3 [][][] = new int [2][3][4];
		System.out.println(array_3);
		System.out.println(array_3[0]);
		System.out.println(array_3[0][0]);
		System.out.println(array_3[0][0][0]);
		int count = 0;
		for (int i = 0;i<array_3.length;i++) {
			System.out.println("{");
			for (int j = 0;j<array_3[i].length;j++) {
				System.out.print("(");
				for (int k = 0;k<array_3[i][j].length;k++) {
					array_3[i][j][k] = (int) (Math.random() * 100);
					System.out.print("["+array_3[i][j][k]+"],");
					count++;
				}
				System.out.println(")");
			}
			System.out.println("}");
		}
		System.out.println("初始化时指定好结构的多维数组的存放数据个数" + count);
		System.out.println("——————————————————————————————————————————————");
		count = 0;
		int array [][][] = new int [3][][];
		array[0] = new int [2][];
		array[0][0] = new int [6];
		array[0][1] = new int [8];
		array[1] = new int [3][5];
		array[2] = new int [4][7];
		for (int i = 0;i<array.length;i++) {
			System.out.println("{");
			for (int j = 0;j<array[i].length;j++) {
				System.out.print("(");
				for (int k = 0;k<array[i][j].length;k++) {
					array[i][j][k] = (int) (Math.random() * 100);
					System.out.print("["+array[i][j][k]+"],");
					count++;
				}
				System.out.println(")");
			}
			System.out.println("}");
		}
		System.out.println("初始化时未指定结构的多维数组的存放数据个数" + count);
	}
}
输出结果:
[[[aaa@qq.com
[[aaa@qq.com
[aaa@qq.com
0
{
([22],[49],[46],[68],)
([7],[27],[98],[71],)
([78],[11],[11],[39],)
}
{
([46],[59],[61],[52],)
([99],[62],[24],[99],)
([28],[25],[5],[68],)
}
初始化时指定好结构的多维数组的存放数据个数24
——————————————————————————————————————————————
{
([66],[86],[8],[79],[31],[81],)
([62],[87],[54],[57],[96],[52],[58],[77],)
}
{
([70],[21],[48],[15],[12],)
([99],[44],[22],[69],[60],)
([31],[9],[98],[5],[15],)
}
{
([42],[27],[12],[4],[46],[79],[17],)
([63],[85],[34],[7],[16],[55],[13],)
([99],[27],[16],[99],[14],[98],[83],)
([84],[84],[98],[82],[28],[60],[46],)
}
初始化时未指定结构的多维数组的存放数据个数57

这里的个数并不难算出
(1* 6 + 1* 8 )+ 3 * 5 + 4 * 7 = 57

多维数组的外层都是指向一个数组的地址,最内层的则是负责用于存储数据的数组。