文章目录
数组的概念
程序:由程序员写好,让电脑去执行
程序=算法+数据结构
一个好的算法+数据结构=优秀的程序
算法:变量 运算符 分支结构 循环结构
数据结构:数组,是一个最基本的数据结构
数组的定义
语法:数据类型[ ] 数组名/变量名=new 数据类型[ size];
数组的初始化
动态初始化
语法: 数据类型[] 变量名 = new 数据类型[size];
int [] arr2=new int[5];//默认值 0 0 0 0 0
//数组便捷操作的方法
System.out.println(Arrays.toString(arr2));
说明:动态初始化创建数组,只有大小,数组中没有具体的值,但是数组的具体类型有默认值
总结:
- byte short int long类型的数组,默认是0
- float double类型的数组,默认是0.0
- boolean类型的数组,默认是false
- char类型的数组,默认是空
- String类型的数组,默认是null
Arrays类
Arrays是java工具类,该类提供了很多类对象
静态初始化
语法:数据类型【】 数组名={值1,值2,值3..........};
说明:静态初始化数组既有大小,又有具体的值
带new的静态初始化
语法:数据类型【】数组名=new 数据类型【】{值1.值2,值3.......}
关于初始化的几个错误
- 数组中存储的值必须是同一类型,并且跟定义的数据类型相同
- 动态初始化数组一定要指定size
- 先声明一个数组,再给数组变量初始化时,动态初始化和带new的静态初始化可以赋值,静态初始化不可以
//几种赋值方式
int [ ] arr21;
arr21=new int[5];
//arr21={10,20,30,40};//编译错误
arr21=new int[]{10,20,30};
【】
- ArrayIndexOutOfBoundsException数组下标越界 异常
求数组的长度、大小
语法:数组名.length
数组内容的访问操作
语法:数组名[下标]
建议:
System.out.println(arr33[arr33.length-1]);
System.out.println(Arrays.toString(arr31));
**使用第一种方式来获取最后一个值,因为第一种方法不会因为数组的内容而改变而去修改代码,这种代码编程的方式叫做软编码,第二种叫做硬编码 **
数组的复制
通过自己写代码的方式
int[] arr01={10,20,30,40,50};
int[] arr02=new int[5];
System.out.println("复制前:"+Arrays.toString(arr02));
for(int i=0;i<arr01.length;i++){
arr02[i]=arr01[i];
}
System.out.println("复制后:"+Arrays.toString(arr02));
*System.arraycopy( , , , , ,)
- src : 源数组(要被复制的数组)
- srcPos:源数组的起始下标位置
- dest:目标数组
- destPos:目标数组的起始下标位置
- length:要复制的源数组的元素个数
int[] arr03={100,200,300,400,500};
int[] arr04=new int[5];
System.out.println("复制前:"+Arrays.toString(arr04));
System.arraycopy(arr03,0,arr04,0,5);
System.out.println("复制后:"+Arrays.toString(arr04));
目标数组=Arrays.copyOf( ,)
- original:源数组
- newLength:目标数组的长度
int[] arr06={6,9,4,3,1};
int[] arr07=Arrays.copyOf(arr06, 5);
System.out.println("复制后:"+Arrays.toString(arr07));
说明:当目标数组的长度小于源数组的长度时,会将源数组多余的部分截取;
当目标数组的长度大于源数组的长度时,会根据数组的数据类型进行填充。
数组的排序
概念:将数组中的元素内容按一定要求重新排列
Arrays.sort(目标数组);
int[] arr={89,72,34,57};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
二维数组
概念:把多个一维数组放在一起。
二维数组的初始化
静态初始化
int [][] arr={{1,2,3},
{4,5,6},
{7,8,9}}
语法:数据类型[][] 变量名={一维数组,一维数组.........}
动态初始化
语法:数据类型[][] 数组名=new 数据类型[行数][列数] //指定了二维数组的行列,指定行表示包含了几个一维数组,指定列表示每一个一维数组包含了几个元素,这种指定,每一个一维数组包含的元素个数相同。
数据类型[][] 数组名=new 数据类型[行数][] //指定行,不指定列,表示指定了该二维数组中包含了几个一维数组,但是每一个一维数组包含几个元素个数目前还不清楚
二维数组的访问操作
获得二维数组的大小
A 数组名.length 获取该二维数组中包含几个一维数组就有几行
B 数组名.[下标].length//获取某一个数组中的元组个数(某一行的列数)
根据下表访问操作二维数组
语法:数组名[][]