数组的定义与使用

数组

数组属于引用数据类型。

什么是数组

当保存或使用多个同类型的变量时,多个变量之间用逗号分隔,且必须赋值后才能使用。数组就是保存相同类型元素的一个集合(数组是一个线性表的数据结构)。数组在内存中是一段连续的空间,类似现实生活中的车库。
在这里插入图片描述

数组的特点

a、数组中存放的元素类型是完全相同的;
b、数组的空间是连续的,相邻元素紧挨着存储;
c、数组中每个空间都有其编号(相较于首元素的偏移量),称为数组元素的下标。
d、一旦声明创建一个数组之后,数组长度固定,无法修改。

数组的初始化

数组的动态初始化:创建数组时,规定长度,不给元素赋值,每个数组元素的值都是默认值
语法:数据类型[] 数组名称 = new 数据类型[数组长度]
数组的静态初始化:声明并创建数组时,就给对应的元素进行赋值
语法1:数据类型[] 数组名称 = {data1,data2,......,datan}
语法2:数据类型[] 数组名称 = new 数据类型[不写长度]{data1,data2,....,datan}

数组的使用

1、数组元素的访问
数组在内存中是一块连续的空间,空间编号从0开始一次递增,这个编号就称为数组的下标。最终访问数组元素就是根据数组名称[下标]来取得对应的元素,而当访问了不合法的数组下标,就会抛出数组越界异常。
2、数组的遍历:按照一定的规则访问数组中的每个元素。
普通的for循环:可以进行增删改查
在这里插入图片描述
增强的for-each循环:只能用于数组的元素读取,不能修改元素
语法:`for(数据类型,临时变量名称:数组名称){}

在这里插入图片描述

堆区和栈区

在这里插入图片描述

引用数据类型变量

基本数据类型变量保存的都是具体的数值,引用数据类型变量保存的是对应对象的地址(堆内存的地址)。引用数据类型就是给对象起别名,对象是实实在在的实体,通过new关键字产生,保存在堆内存中,引用就是给这个对象起名字,通过这个引用来访问对象。对于数组而言,引用保存了产生的数组对象的首元素地址,若此时改引用定义在main中,就属于临时变量在栈中存储。
在这里插入图片描述

引用数据类型的默认值null

当一个引用数据类型的值为null时,表示该引用不指向任何的内存空间,因此无法使用该引用获取任何值。一旦使用值为null的引用访问任何数值时,就会抛出空指针异常(NPE)。
在这里插入图片描述

引用数据类型作为方法的参数

回顾之前的swap函数:
在这里插入图片描述

引用数据类型作为方法的返回值

在这里插入图片描述

数组练习

1、数组转字符串
在这里插入图片描述
自定义实现:
在这里插入图片描述
2、数组拷贝
使用JDK提供的Arrays.copyOf方法可以真正复制一个数组(在堆上产生一个新空间,并将原数组内容拷贝过来)。
当新数组的长度和原数组长度相同,称为完全拷贝;
当新数组的长度小于原数组,称为部分拷贝,此时从第一个元素开始复制,直到复制到新数组长度为止;
当新数组的长度大于原数组,此时超过长度的新数组元素使用数据类型的默认值填充。
在这里插入图片描述

自定义实现:
在这里插入图片描述

2、数组元素的查找:二分查找,前提是有序数组
在查找元素时,每次都在和区间的中间位置进行比较,然后将待查区间一分为二,直到区间变为0。
在这里插入图片描述
在这里插入图片描述
3、数组的排序:冒泡排序
核心思想:不断的将前一个元素和后一个元素进行大小比较,若前一个比后一个大,就两两交换彼此位置,不断重复此过程,直到数组有序。
在这里插入图片描述

4、数组的逆序
在这里插入图片描述

二维数组

二维数组本质上就是个表格。
动态初始化:数据类型[][] 数组名称 = new 数据类型[行数][列数]
静态初始化:数据类型[][] 数组名称 = new 数据类型[][]{{第一行数据},{第二行数据},.......}
二维数组的遍历
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值