- 数组是多个相同类型的数据按一定顺序排列的集合。
- 创建数据对象会在内存中开辟一整块内存空间。
- 数组的长度一旦确定就不能更改。
- 数组是引用数据变量,数组中的元素可以是基本数据变量。
- 数组的复制:我们给一个arr1数组,现在要让arr2元素和arr1一样。先看一下错误的答案:
1 //数组的静态初始化:数组的初始化和元素赋值操作同时进行 2 int [] arr1 = new int[] {2,4,7,9,-3,0,3}; 3 int [] arr2 = arr1; 4 5 //arr2的遍历 6 for(int i = 0;i < arr2.length;i++) { 7 System.out.print(arr2[i] + " "); 8 } 9 System.out.println();//换行 10 //现在我们来改一下arr1的值 11 arr1[0] = 0; 12 arr1[1] = 0; 13 //再对arr2遍历 14 for(int i = 0;i < arr2.length;i++) { 15 System.out.print(arr2[i] + " "); 16 } 17
看一下结果:
之所以会出现这种改动arr1同时arr2也发生改变是因为我们int [] arr2 = arr1;相当于把arr1的地址赋给arr2,当改变arr1时,arr2也会发生改变。
所以我们应该为arr2重新分配空间。
修改后的代码如下:
1 int [] arr1 = new int[] {2,4,7,9,-3,0,3}; 2 //arr2的动态初始化:初始化和赋值分开进行 3 int [] arr2 = new int[arr1.length]; 4 //为arr2赋值并遍历 5 for(int i = 0;i < arr1.length;i++) { 6 arr2[i] = arr1[i]; 7 System.out.print(arr2[i] + " "); 8 9 } 10 11 System.out.println();//换行 12 //现在我们来改一下arr1的值 13 arr1[0] = 0; 14 arr1[1] = 0; 15 //再对arr2遍历 16 for(int i = 0;i < arr2.length;i++) { 17 System.out.print(arr2[i] + " "); 18 } 19
这样赋值后,我们修改arr1的值,arr2的值也是不变的:
2.数组的反转:我们以arr1为例,反转就是数组的第一个元素和数组的最后一个互换位置,依此类推。代码实现如下:
1 //数组的静态初始化:数组的初始化和元素赋值操作同时进行 2 int [] arr1 = new int[] {2,4,7,9,-3,0,3}; 3 System.out.println("原数组是"); 4 for(int i = 0;i < arr1.length ;i++) { 5 System.out.print(arr1[i] + " "); 6 } 7 //反转只要交换一次就够了,所以i < arr1.length/2 8 for(int i = 0;i < arr1.length/2;i++) { 9 //对应的数组元素交换位置 10 int temp = arr1[i]; 11 arr1[i] = arr1[arr1.length - 1 -i]; 12 arr1[arr1.length - 1 -i] = temp; 13 } 14 System.out.println("\n反转后数组是"); 15 //遍历数组 16 for(int i = 0;i < arr1.length ;i++) { 17 System.out.print(arr1[i] + " "); 18 }
结果为:
3.我们使用冒泡排序对数组进行一下从小到大排列,冒泡排序是一次比较两个元素,如果他们的顺序不符合要求就把他们交换过来。直到交换到末尾。
1 //数组的静态初始化:数组的初始化和元素赋值操作同时进行 2 int [] arr1 = new int[] {2,4,7,9,-3,0,3}; 3 System.out.print("原数组为:"); 4 //遍历数组 5 for(int i = 0;i < arr1.length ;i++) { 6 System.out.print(arr1[i] + " "); 7 } 8 //冒泡排序 9 for(int i = 0;i < arr1.length -1;i++) { 10 for(int j = 0;j < arr1.length - 1 - i;j++){ 11 if(arr1[j] > arr1[j+1]) { 12 int temp = arr1[j]; 13 arr1[j] = arr1[j+1]; 14 arr1[j+1] = temp; 15 } 16 } 17 } 18 System.out.print("\n从小到大排列为:"); 19 //遍历数组 20 for(int i = 0;i < arr1.length ;i++) { 21 System.out.print(arr1[i] + " "); 22 }
看一下输出结果:
4.线性查找数据,本质还是一个数组的遍历。
1 //数组的静态初始化:数组的初始化和元素赋值操作同时进行 2 int [] arr1 = new int[] {2,4,7,6,9,-3,0,3,6}; 3 int x = 6; 4 boolean isFlag = false;//来确定数组中是否有要查找的元素 5 for(int i = 0;i < arr1.length;i++) { 6 if(arr1[i] ==x) { 7 System.out.println("数字" + x + "位置在" + i); 8 isFlag = true;//证明要找的数字找到了 9 } 10 } 11 //执行if判断,看数组中是否有这个数字。 12 if(!isFlag) { 13 System.out.println("对不起,数组中没有这个数"); 14 }
展示一下结果我们选择出现了两次的6来进行实验:
5.二维数组相当于一维数组中存储的值还是一个数组,所以二维数组的初始化可以这样写:
1 //二维数组的初始化和赋值 2 int [][] arr1 = new int[3][] ; 3 arr1[0] = new int[]{2,4,6,7}; 4 arr1[1] = new int[] {-1,0,-5}; 5 arr1[2] = new int[] {234}; 6 //二维数组的遍历 7 for(int i = 0;i < arr1.length;i++) { 8 for(int j = 0;j < arr1[i].length;j++) { 9 System.out.print(arr1[i][j] + " "); 10 } 11 System.out.println(); 12 }
结果为: