java基础再回首(二)——数组的补缺拾遗

     在总结数组的用法之前,我们先明确一下数组的概念与特点:
  • 数组是多个相同类型的数据按一定顺序排列的集合。
  • 创建数据对象会在内存中开辟一整块内存空间。
  • 数组的长度一旦确定就不能更改。
  • 数组是引用数据变量,数组中的元素可以是基本数据变量。
      也可以是引用数据变量(二维数组)。 了解了一些数组的基本的特点,我们就可以来看一下数组的用法,基本的用法将直接在代码注释中体现。
  1. 数组的复制:我们给一个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         

看一下结果:

java基础再回首(二)——数组的补缺拾遗

 

 

 之所以会出现这种改动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的值也是不变的:

java基础再回首(二)——数组的补缺拾遗

 

        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         }

结果为:

java基础再回首(二)——数组的补缺拾遗

 

 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         }    

看一下输出结果:

java基础再回首(二)——数组的补缺拾遗

 

 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来进行实验:

java基础再回首(二)——数组的补缺拾遗

 

 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         }

结果为:

java基础再回首(二)——数组的补缺拾遗

 

 

 

 

上一篇:数组的方法


下一篇:JS数组方法(ES5、ES6)