1:一维数组
1.1:一维数组的初始化
初始化方式分为两种,静态初始化和动态初始化,静态初始化在初始化时就给数组赋了值,而动态初始化时先定义长度,再遍历赋值
在只明确数据个数的时候用动态,手动指定元素的时候用静态
定义格式:
静态初始化:
数据类型 []数组名=new 数据类型[]{1,2,3~};
简化:数据类型 []数组名={1,2,3~};
动态初始化:
数据类型 []数组名=new 数据类型[数组长度];
1.2:如何创建无上限或自定义长度的数组
java的数组无论用哪种方法初始化,一旦初始化长度,就不能改变了,如果想要创建无上限或者自定义长度的容器来存储数据,要么是改用list集合,要么是在循环中创建新数组,数组的长度可以用length方法获取,格式为arr.length,然后把arr.length+1作为新数组的长度,达到数组长度跟随输入数据数量改变的效果
Scanner scan = new Scanner(System.in);
int []arr1=new int[0],arr2;
int j=1;
//定义0长度的arr1,和不初始化的arr2
j用来判断是否要继续接收数据
while(j==1){
arr2=new int[arr1.length+1];
for(int i=0;i<arr1.length;i++){
arr2[i]=arr1[i]; }
//初始化arr2使其长度为arr1的长度+1
arr2[arr1.length]=scan.nextInt();
arr1=arr2;
//将新输入的值赋给arr2,后传给arr1
//循环结束,下一次循环会重新初始化arr2
}
1.3:数组的常用方法
equals()方法:判断两个数组是否相同,方法比较的是数据,而有着接近效果的==比较的是地址值,两个不同的数组地址值是不一样的所以不能用
System.out.println(arr1.equals(arr2));
方法返回boolean值,也可以通过Arrays调用该方法
System.out.println(Arrays.equals(arr1,arr2));
sort()方法:按照从小到大的顺序对数组进行排序,括号内可以对排序范围进行指定,但切记“包头不包尾”
//作用一
int[] arr1={1,9,3,7};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));//[1, 3, 7, 9]
//作用二
int[] arr2={1,9,3,7,2,5};
Arrays.sort(arr2,1,4);//范围包含1不包4
System.out.println(Arrays.toString(arr2));//[1, 3, 9, 7, 2, 5]
length方法(无括号):返回数组的长度,arr.length就可获取长度
toString方法:返回对象的字符串表现形式,通过Arrays调用
String arrStr=Arrays.toString(arr);
binarySearch()方法:通过二分法查找数组中指定内容,二分法的特点是查询的数据必须有序,从小到大排列,所以可以搭配前面的sort方法使用,通过Arrays调用
int[] arr = {3,5,6,1,2,4};
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr,3)); 结果为6
System.out.println(Arrays.binarySearch(arr,1,5,4));指定1-5为查找范围
copyOf()方法:复制指定的数组,可指定结束位置不可指定起始位置,用来取代挨个遍历给新数组赋值的复制方法,通过Arrays调用
int arr1={~};
int arr2=Arrays.copyOf(arr1) 全部复制
int arr2=Arrays.copyOf(arr1,3) 复制arr1到索引3结束
copyOfRange()方法:复制数组的指定范围,前面一个只能选择结束位置,这个可选开始和结束位置,注意“包头不包尾”
int [] arr = {1,2,3,4};
int [] arr2=Arrays.copyOfRange(arr,1,3); 范围包含1不含3
2:二维数组
二维数组原理与一维数组类似,倒不如说就是多个一维数组的组合,也包括静态初始化和动态初始化方式
2.1:二维数组的初始化
静态初始化:
数据类型[][] 数组名=new 数据类型[][] { {1,2} ,{3,4} };
简写:
数据类型[][] 数组名={ {1,2},{3,4} };
动态初始化:
数据类型[][]数组名=new 数据类型[行][列];
行表示有多少个一维数组,列表示每个一维数组能存多少元素
二维数组的遍历使用两层for循环,外循环遍历获取每一个一维数组,内循环遍历一维数组获取每一个元素,图中for循环里的arr.length和arr[i].length的不同,解释了二维数组本质是一维数组的组合
int [][]arr=new int[m][n];
省去赋值步骤,这里行为m,列为n
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println("循环遍历到每一个元素")
}
}
2.2:创建列数不等的二位数
假如我想让二维数组的一维数组长度不同,也就是每一行的列值不同,该怎么做?
例:我要创建一个2行的二维数组,第一行存2个数,第二行存3个数
方法是额外创建两个一位数组,赋值给二维数组的行
int [][]arr=new int[2][]; 定义已知行数的二维数组
int []arr1={1,2};
int []arr2={3,4,5}; 定义一位数组存储数据
arr[0]=arr1;
arr[1]=arr2; 直接将存有数据的一维数组赋值给二维数组的行
菜鸟学习笔记:D