今天主要回顾一下数组方面的知识吧,有一维数组,二维数组,以及它们的经典应用。、
(1)for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } //与其说遍历数组不如说遍历下标 (2)for(int i : arr){ //arr[i] += 10; //只能遍历数组但是不能改变数组中的值 System.out.println(i); } //增强 for 循环,此时的 i 依次表示数组中的每一个元素
//4.获取数组中最值(最大值/最小值) //方式一:定义变量来记录数组中的最大值,然后遍历数组,让数组中的元素依次与最大值进行比较;如果大于最大值,则将这个元素覆盖原来的最大值 int max = arr[0]; for(int i : arr){ if(max < i){ max = i; } } System.out.println(max); //方式二:定义变量来记录最大值的下标。 int flag = 0; for(int i = 1; i < arr.length; i++){ if(arr[flag] < arr[i]){ flag = i; } } System.out.println(arr[flag]);
//冒泡排序 for(int i = 1; i < arr.length; i++){ //定义一个循环控制每一轮比较的次数 for(int j =1; j <= arr.length - i; j++){ if(arr[j -1] > arr[j]){ int temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } } } String str = Arrays.toString(arr); System.out.println(str);
//选择排序 //控制轮数 for(int i = 1; i < arr.length; i++){ //控制每一轮要比较的下标 for(int j = i; j < arr.length; j++){ if(arr[i - 1] > arr[j]){ int temp = arr[i - 1]; arr[i - 1] = arr[j]; arr[j] = temp; } } } //只能进行升序排序 //扩展:底层用的是快速排序 + 归并排序 //时间复杂度:O(nlogn) Arrays.sort(arr); System.out.println(Arrays.toString(arr));
//反转数组 //方式一: //时间复杂度:O(n),空间复杂度:O(n) int[] newArr = new int[arr.length]; for(int i = arr.length - 1, j = 0; i >= 0; i--,j++){ newArr[j] = arr[i]; } System.out.println(Arrays.toString(newArr)); //方式二:头尾交换 //时间复杂度:O(n),空间复杂度 O(1) for(int i = 0, j = arr.length - 1; i <= j; i++, j--){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } System.out.println(Arrays.toString(arr));
/数组的复制 //表示从 arr1 下标为 2 的位置上复制 4 个元素放入 arr2 数组中, //从 arr2 数组的下标为 4 的位置存放 int[] arr1 = {5,1,7,0,8,2,6}; int[] arr2 = new int[5]; System.arraycopy(arr1,2,arr2,0,4); System.out.println(Arrays.toString(arr2)); //数组的扩容 --- 数组的复制 --- 产生一个新的数组,导致扩容之后的数组和原数组不是同一个 int[] arr = {3,6,1,7,9}; int[] newArr = new int[8]; System.arraycopy(arr,0,newArr,0,arr.length); arr = newArr; arr = Arrays.copyOf(arr,8);//这一步等价于前面三步 System.out.println(Arrays.toString(arr));
import java.util.Scanner; import java.util.Arrays; public class Demo{ public static void main(String[] args){ Scanner s = new Scanner(System.in); //定义行数 int n = s.nextInt(); //定义二维数组来存储杨辉三角 int[][] arr = new int[n][]; //遍历数组,向里填充元素 for(int i = 0; i < n; i++){ //先给每一个一维数组定义大小 arr[i] = new int[i + 1]; //遍历一个一维数组,向里填充元素 for(int j = 0; j <= i; j++){ //判断头尾元素 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(); } //一个循环打印九九乘法表 for(int i = 1,j = 1;i <= 9; j++){ //无论哪一行,上来都是先打印* System.out.print("*"); //判断是否打印完最后一个* if(j == i){ //换行 System.out.println(); //行数 +1 i++; // *从头开始计数 j = 0; } } } }