5.Java数组
5.1数组概述
数组,相同数据类型的元素的线性集合;
基本类型不是对象,当时基本类型组成的数组是对象;
5.2一维数组
在使用一维数组之前,需要先 声明、分配内存、初始化
1.声明
数组元素类型 数组名[];
数组元素类型[] 数组名;
int day[];
int[] month;
2分配内存
数组名=new 数组元素类型[数组元素个数];
day=new int[10];
使用关键字new时,必须指定数组元素类型和数组长度(直接创建数组并初始化时可以不直接说明长度,但数组长度已确定);
ps:数组声明和分配内存可同时进行:
int year[]=new int [10];
3.初始化
已经创建、分配内存的数组可以通过下标给数组元素赋值
另外还有2种语句可以直接在创建数组的同时直接初始化数组:
String food[]=new String[]{"chicken","hot dog"};
String children[]= {"boys","girls"};
ps:直接创建并初始化数组时,不可以指定数组长度
数组在分配内存后大小已经固定,数组扩容只能创建数组的副本
array.length是一个常量,在数组初始化后不可变
5.3二维数组
1.声明,而后分配内存,再按下标初始化(初始化过程略)
int arr1[][];
arr1=new int[3][10];
2.声明的同时分配内存,而后初始化
int arr5[][]=new int[2][3];
arr5=new int[][] {{1,2,3},{4,5,6}};
3.创建同时初始化二维数组
int arr3[][]=new int[][] {{1,2,3},{4,5}};
int arr4[][]= {{1,2,3},{4,5,6}};
//此时不可指定数组维度大小,第一维、第二维都不可
ps:二维数组的第二维长度可不一致
int[][] arr2;
arr2=new int[3][];
arr2[0]=new int[] {1,2,3,4,5,6,7};
//按行初始化
arr2[1]=new int[4];
5.4数组的基本操作
1.遍历数组
int Arr[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
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();
}
使用foreach语句时遍历会更加简单
int Arr[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
for(int a[]:Arr) {
for(int b:a) {
System.out.print(b);
}
System.out.println();
}
2.复制数组
错误示范:
int arr1[]= {1,2,3,4,5};
int arr2[]=arr1;
//arr1在内存中是一个变量,指向数组元素的地址;而数组元素在内存中是一些常量
//将arr1赋值给arr2,仅仅是让arr2和arr1指向同一块区域,两者还是同一个数组,此时修改arr1,arr2也会改变
两种复制数组的方法:
此时应调用Arrays类的copyOf()方法和copyOfRange()fang方法
(1)copyOf(arr,int newlength)
newlengh大于原数组长度时,新数组自动补0
(2)copyOfRange(arr,int formIndex,int toIndex)
formIndex指定开始复制数组位置,需要在0至整个数组长度之间
toIndex指定复制范围最后索引位置,可以大于arr数组长度,新数组不包含索引是toIndex的元素
int arr1[]= {1,2,3,4,5};
int arr2[]=Arrays.copyOf(arr1, 4);
int arr3[]=Arrays.copyOfRange( arr1, 0, 8);
3.填充替换数组元素
填充: fill(arr,value)
int arr1[]=new int[5];
Arrays.fill(arr1,8);
替换:fill(arr,int formIndex,int toIndex,value)
将formIndex到toIndex之间的元素用value替换,不包换toIndex,toIndex下标不可越界
int arr1[]=new int[5];
Arrays.fill(arr1, 1,3,0);
4.排序
排序语法:Arrays.sort(object)
/String类按照字典顺序排序,数字最前,其次大写字母,最后小写字母
int arr[]=new int[]{23,42,12,8};
Arrays.sort(arr);
5.数组查询
对数组排序后,可以采用二分搜索法来搜索指定数组元素
语法如下:
binarySearch(Object[] a,Object key)
binarySearch(Object[] a,`int fromIndex,int toIndex,Object key)
//包含fromIndex,不包含toIndex