【数组的定义与使用】
文章目录
- 一、数组的基本概念
-
- 1、什么是数组
- 2、数组的创建及初始化
-
- (1)数组的创建
- (2)数组的初始化
- 3、数组的使用
-
- (1)数组中元素访问
- (2)遍历数组
- 二、数组是引用类型
-
- 1、初始JVM的内存分布
- 2、基本类型变量与引用类型变量的区别
- 3、再谈引用变量
- 4、认识 null
- 三、数组的应用场景
-
- 1、保存数据
- 2、作为函数的参数
-
- (1)参数传基本数据类型
- (2)参数传数组类型(引用数据类型)
- 3、作为函数的返回值
- 四、数组练习
-
- 1、数组转字符串
- 2、数组拷贝
- 3、求数组中元素的平均值
- 4、查找数组中指定元素(顺序查找)
- 5、查找数组中指定元素(二分查找)
- 6、数组排序(冒泡排序)
- 7、数组逆序
- 8、奇数位于偶数之前
- 9、只出现一次的数字
- 10、Arrays常用方法
- 五、二维数组
一、数组的基本概念
1、什么是数组
数组:可以看成是相同类型元素的一个集合。 在内存中是一段连续的空间。
- 数组中存放的元素其类型相同
- 数组的空间是连在一起的
- 每个空间有自己的编号,起始位置的编号为0,即数组的下标
2、数组的创建及初始化
(1)数组的创建
T:表示数组中存放元素的类型
T[]:表示数组的类型
N:表示数组的长度
(2)数组的初始化
数组的初始化主要分为动态初始化以及静态初始化。
1. 动态初始化:在创建数组时,直接指定数组中元素的个数int[] array = new int[10];
2. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
语法格式: T[] 数组名称 = {data1, data2, data3, ..., datan}; int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9}; double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0}; String[] array3 = new String[]{"hell", "Java", "!!!"};
【注意事项】
- 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
- 静态初始化时, {}中数据类型必须与[]前数据类型一致。
- 静态初始化可以简写,省去后面的new T[]。
注意:虽然省去了new T[], 但是编译器编译代码时还是会还原
- 数组也可以按照如下C语言个数创建,不推荐
/* 该种定义方式不太友好,容易造成数组的类型就是int的误解 []如果在类型之后,就表示数组类型,因此int[]结合在一块写意思更清晰 */ int arr[] = {1, 2, 3};
- 静态和动态初始化也可以分为两步,但是省略格式不可以
int[] array1; array1 = new int[10]; int[] array2; array2 = new int[]{10, 20, 30}; // 注意省略格式不可以拆分, 否则编译失败 // int[] array3; // array3 = {1, 2, 3};
- 如果没有对数组进行初始化,数组中元素有其默认值
如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:
如果数组中存储元素类型为引用类型,默认值为null
3、数组的使用
(1)数组中元素访问
数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。
也可以通过[]对数组中的元素进行修改
【注意事项】
- 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
- 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。
下标越界抛出了 java.lang.ArrayIndexOutOfBoundsException 异常(数组越界异常). 使用数组一定要下标谨防越界(2)遍历数组
所谓 “遍历” 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作,比如:打印。
注意:在数组中可以通过 数组对象.length 来获取数组的长度
for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错
二者区别:
1、for循环是有下标的、for each只是简单的遍历
2、一个是需要知道长度的,一个不需要
按住Ct