【JavaSE入门】:Java中的数组

导航🌌

目录

💭数组介绍

✨数组的使用(*)

✨数组赋值机制(*)

✨多维数组 - 二维数组(*)


💭数组介绍

数组可以存放多个同一类型的数据。数组也是一种数据类型,属于引用类型。

即:数组就是一组数据

✨数组的使用(*)

  • 使用方式1 - 动态初始化

数组的定义:数据类型 数组名[] = new 数据类型[大小];

int a[] = new int[5];//创建了一个数组,名字a,存放5个int数据
double b[] = new double[10];//创建了一个数组,名字b,存放10个double数据
String arr[] = new String[10];//创建了一个数组,名字arr,存放10个String数据

说明:这是定义数组的一种方法,存放其他类型数据的数组可依次类推创建

  • 使用方式2 - 动态初始化

先声明数组:数组类型 数组名[];

也可这样声明:数组类型[] 数组名;(在Java中推荐使用这种)

创建数组:数组名 = new 数据类型[大小];

char a[];
a = new char[10];
int[] b;
b = new int[5];

使用方式3 - 静态初始化

初始化数组:数据类型 数组名[] = { 元素值, 元素值, ……};

int a[] = { 1, 2, 3, 4, 5, 6, 7 };
double[] b = { 1.1, 2.2, 3.3, 4.4 };

♦细节:

  1. 数组的引用、使用、访问、获取数组元素均是同一个意思
  2. 数组名[下标/索引/index],数组的下标从0开始
  3. 数组的下标必须在指定范围内使用,否则会出现越界访问,报错。有效下标为0 ~ 数组长度-1
  4. 获取数组长度(大小):数组名.length
  5. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  6. 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型,但是不能混用
  7. 数组创建后,如果没有赋值,有默认值:int 0,short 0,byte 0,long 0,float 0.0,double 0.0,char \u0000,boolean false,String null

使用实例,利用冒泡排序对数组arr(9,8,7,6,5,4,3,2,1,0)进行排升序

public class Test{
	public static void main(String[] args){

		int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
		//冒泡排序
		for(int i=0; i<arr.length; i++){
			for(int j=0; j<arr.length-i-1; j++){
				if(arr[j]>arr[j+1]){
					int tmp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = tmp;
				}
			}
		}
		//打印结果
		for(int i=0; i<arr.length; i++){
			System.out.print(arr[i] + " ");
		}
	}
}

运行结果:


✨数组赋值机制(*)

基本数据类型赋值,这个值就是具体的数据,而且相互不影响。

数组在默认情况下是引用传递,赋的值是地址

试着运行下面一段代码:

public class Test{
	public static void main(String[] args){
		int num1 = 7;
		int num2 = num1;

		num2 = 3;
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);

		int[] arr1 = { 1, 4, 7 };
		int[] arr2 = arr1;//把arr1的地址赋给arr2

		arr2[0] = 3;
		//打印输出
		System.out.print("arr1: ");
		for(int i=0; i<arr1.length; i++){
			System.out.print(arr1[i] + " ");
		}
		System.out.println();

		System.out.print("arr2: ");
		for(int i=0; i<arr2.length; i++){
			System.out.print(arr2[i] + " ");
		}
		System.out.println();
	}
}

运行结果:

数组赋值的内存图(重点):

数组的扩容与缩减

扩容思路(缩减思路类似操作即可):

  1. 定义初始数组 int[] arr = { 1, 2, 3 };//要求扩容增加一个元素4
  2. 定义一个新数组 int[] arrNew = new int[arr.length+1];
  3. 遍历arr数组,依次将arr的元素拷贝到arrNew数组
  4. 将4赋值给arrNew[arrNew.length-1]
  5. 让arr指向arrNew,arr = arrNew,那么原来的arr数组就会被当成垃圾回收(销毁),Java中有垃圾自动回收机制,不需要我们去释放


✨多维数组 - 二维数组(*)

二维数组的概念:

  • 二维数组的每个元素都是一维数组,所以如果需要得到每个一维数组的值,还需要再次遍历
  • 访问第i+1个一维数组的第j+1个元素:arr[i][j];
  • 使用方式1:动态初始化

语法:数据类型[][] 数组名 = new 类型[大小][大小]

int[][] arr = new int[3][4];
  • 使用方式2:动态初始化

先声明:数据类型 数组名[][];

再定义:数组名 = new 类型[大小][大小];

int[][] arr;
arr = new int[3][4];
  • 使用方式3:动态初始化 - 列数不确定(*)

Java语言的二维数组支持列数可以不一样

需求:创建下面二维数组,并输出

j = 0j = 1j = 2
i = 01
i = 122
i = 2333

代码:

public class Test{
	public static void main(String[] args){

		int[][] arr = new int[3][];//创建一个二维数组,有三个一维数组且这三个一维数组还没有开辟数据空间

		for(int i=0; i<arr.length; i++){
			//给每个一维数组开辟空间
			//如果没有给一维数组,那么arr[i]就是null
			arr[i] = new int[i+1];

			//遍历一维数组赋值
			for(int j=0; j<arr[i].length; j++){
				arr[i][j] = i+1;
			}
		}

		//打印输出
		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();
		}

	}
}
  • 使用方式4:静态初始化

定义:数据类型 数组名[][] = { {值1,值2,…},{值1,值2,…},{值1,值2,…},… };

int arr[][] = { {1,2,3}, {3,3}, {7} };

细节:

  1. 一维数组声明方式有:int[] x 或者 int x[];而二维数组声明方式有:int[][] y 或者int[] y[] 或者 int y[][]
  2. 二维数组实际上由多个一维数组组成,它的各个一维数组长度可以相同,也可不相同

学习记录:

  • 📆本篇博客整理于2022.7.30
  • 🎓作者:如何写出最优雅的代码
  • 📑如有错误,敬请指正🌹🌹
  • 🥂关注一波不迷路!如果觉得写的不错,看完了别忘了点赞和收藏啊,感谢支持😏😏
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如何写出最优雅的代码

感谢支持,我将继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值