Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。
数组的基本概念
数组:在内存中开辟的一串用于存储 相同数据类型 的 连续空间
数组名:表示连续空间的首地址,通过首地址可以依次访问数组所有元素。
下标:元素在数组中的排序叫做下标,从0开始
数组的声明:
1,声明一个数组
2 , 给数组分配空间
3 , 给数组赋值
4,访问数组数据,使用数组下标访问
注意:数组长度声明后无法改变,也无法追加
数组声明的缩写
例:
int[] arr={1,2,3,4,5} 最常用
实例:
(一)下面语句首先声明一个数组arr,然后输入一个数字判断该数字是否在数组中,如果在返回其下标
System.out.println("输入一个数字:1,7,3,6,5");
int num=sc.nextInt();
int i;
int arr[]={1,7,3,6,5};
for ( i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (num==arr3[i]) {
System.out.println("数组的下标:"+i);
return;
}
}
}
(二)使用数组实现冒泡排序,实现数字的排序,只能是升序排序
int arr2[]={90,55,66,45,77,86};
for (int i = 0; i < arr2.length-1; i++) {
for (int j = 0; j < arr2.length-1-i; j++) {
if (arr2[j]>arr2[j+1]) {
int a=arr2[j];
arr2[j]=arr2[j+1];
arr2[j+1]=a;
}
}
}
处理数组
数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 foreach 循环。这也使得在我们使用数组的时候,循环是我们经常使用的遍历手段
// 打印所有数组元素
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// 计算所有元素的总和
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// 查找最大元素
double max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
System.out.println("Max is " + max);
运行代码结果如下:
遍历数组的两种方式:
1,使用for循环遍历数组
for (int i = 0; i < 5; i++) {
System.out.print(arr[i]);
}
2,使用foreach遍历数组
int[] arr2={7,2,6,3,4};
for(int num:arr2){
System.out.println(num);
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,
例如:
数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度];
int[][] arr = new int[3][5];---定义了一个整型的二维数组,其中包含3个一维数组,每个一维数组可以存储5个整数
arr[0]---下标为0的位置上的一维数组
arr[1][3]---如果要获取具体的元素需要两个下标
数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][];
int[][] arr = new int[3][];----表示一个包含了三个整型的一维数组的二维数组(-------------这句话好好理解------------------------)
数据类型[][] 数组名 = {{元素},{元素1, 元素2},……};
int[][] arr = {{2,5},{1},{3,2,4},{1,7,5,9}};
注意:[]在变量名前的时候,是紧跟数据类型的;如果[]在后,则是属于当前变量名。
二维数组的应用
经典问题打印杨辉三角
//从控制台获取行数
Scanner s = new Scanner(System.in);
int row = s.nextInt();
//根据行数定义好二维数组,由于每一行的元素个数不同,所以不定义每一行的个数
int[][] arr = new int[row][];
//遍历二维数组
for(int i = 0; i < row; i++){
//初始化每一行的这个一维数组
arr[i] = new int[i + 1];
//遍历这个一维数组,添加元素
for(int j = 0; j <= i; j++){
//每一列的开头和结尾元素为1,开头的时候,j=0,结尾的时候,j=i
if(j == 0 || j == i){
arr[i][j] = 1;
} else {//每一个元素是它上一行的元素和斜对角元素之和
arr[i][j] = arr[i -1][j] + arr[i - 1][j - 1];
}
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
代码运行结果:
Arrays工具类
Arrays工具类是java提供的用于操作还是数组的工具类,位于java.util包中
Arrays.equals(arr, arr1)
比较的原理,逐一比对两个数组中的每一位置,是否相等
而使用==进行判断,是比较两个数组中存储的地址,是否相等
System.out.println(arr == arr1);//数组中传递的是地址
System.out.println(Arrays.equals(arr, arr1));//逐一比对每个位置的是否相等
Arrays.sort(arr2)
对数组进行升序排列,修改原数组
Arrays.sort(arr2,3,6)对数组的指定区域进行排序,包含起始下标,不含结束下标,区间
Arrays.toString(arr2):将数组转换为字符串,转换之后的格式[1,1,1,1,1,1,1]
Arrays.fill(arr3, 12):将数组中的每一个数字都赋指定的数值
Arrays.copyOf(arr4, arr4.length);:将arr4数组中的指定个数,copy到一个新的数组中
如果个数>arr4.length,则新数组中多于的位置用默认值补齐
如果个数<arr4.length,则只copy原数组中的前半部分
Arrays.binarySearch(arr5, 4):查找数组中指定元素,如果找到返回下标,如果没由返回负数
使用这个方法必须是有序的数组,可以先使用Arrays.sort(arr)进行排序