java 基础知识五 数组
数组
保存的是一组有顺序的、具有相同类型的数据。
同一个数组中所有数据元素的数据类型都是相同的。
可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放
1、数组声明
符号“[]”说明声明的是一个数组对象
ArrayType [ ] ArrayName; 或者ArrayType ArrayName[ ];
2、数组创建
使用 ArrayType[arraySize] 创建了一个数组并把新创建的数组的引用赋值给变量 ArrayName
ArrayType [ ] ArrayName = new ArrayType[arraySize];// 使用默认值 arraySize数组长度 固定arraySize
ArrayType [ ] ArrayName = = {value0, value1, ..., valuek};// 使用初始值
3、数组初始化和使用
ArrayName[index] 代表数组ArrayName在index位置的数据
数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,通过下标查找,也可以通过循环遍历
int[] arr = {1, 2, 3, 4, 5,6,7};// 自动初始化 int[] arr1 = new int[10]; arr1[0]=1;// 赋值初始化 可用for循环遍历查找 for(int element:arr) { System.out.println("星期"+element); } for(int i=0;i<arr1.length;i++) { System.out.println("星期"+arr1[i]); }
4、数组复制
从指定源数组 fromArray 中复制一个数组,复制从指定的位置 fromIndex 开始,到目标数 组 toArray,在指定位置 toIndex 结束,复制 length 个元素
System.arraycopy(fromArray ,fromIndex,toArray,toIndex,length)
//数组复制 System.arraycopy(arr, 0, arr1, 0, 5); //循环遍历 使用数组下标 注意下标最大数字为数组长度减一 for(int i=0;i<arr1.length;i++) { System.out.println("arr1 "+arr1[i]); }
5、数组排序
冒泡排序:比较两个相邻的元素,将值大的元素交换至右端。
冒泡排序的过程,是把数组元素中较小的看作是“较轻”的,对它进行“上浮”操作。从底部开始,反复地对数组进行“上浮”操作 n 次,最后得到有序数组
N个数字要排序完成,总共进行N-1遍排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少遍,内层控制每一遍的循环次数
//冒泡算法 int temp; // arr.length - 1是为了防止数据越界 for(int i=0;i<arr.length-1;i++){ //定义每次要比较的数据随着比较的次数的减少而减少 for(int j=0;j<arr.length-i-1;j++){ //每次比较后,要对每个数组里的元素进行比较,并排序 if(arr[j]>arr[j+1]){ //进行排序 temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }
选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
// 选择算法 for(int i=1;i<arr.length;i++){ //定义每次要比较的数据随着比较的次数的减少而减少 for(int j=1;j<arr.length-i-1;j++){ //每次比较后,要对每个数组里的元素进行比较,并排序 if(arr[j]>arr[j+1]){ //进行排序 temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } }
5、多维数组
多维数组用多个索引来访问数组元素,它适用于表示表或其他更复杂的内容,多维数组是数组的数组
以二维数组举例
声明
数据类型[][] 数组名称;
数据类型[] 数组名称[];
数据类型 数组名称[][];
初始化
数据类型[][] 数组名称 = new 数据类型[第一维的长度][第二维的长度];
数据类型[][] 数组名称;
数组名称 = new 数据类型[第一维的长度][第二维的长度];
用法和一维数组一样,也即是一位数组的每一个元素都是一维数组
// int arr3[][]=new int[3][4]; int arr3[][]={{1,2,3},{1,2,3,4},{1,2}}; arr3[0][1]=1; arr3[2][1]=2; for(int element[]:arr3) { for(int el:element){ System.out.println("二维数组 "+el); } }