Java 从入门到进阶之路(五)

  • 2019 年 10 月 3 日
  • 筆記

之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组

数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。

数组

  - 相同数据类型的元素组成的集合

  - 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素,除最后一个元素外,每一个元素都有唯一的后继元素(一个跟一个)

  - 可以通过元素所在的位置的顺序号(下标)做标识来访问每一个元素(下标为0开始,最大到元素个数 -1)

创建数组

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         // 第一种:先声明一个数组变量 arr,然后把新创建的数组的引用赋值给变量 arr   4         int[] arr;   5         arr = new int[5];   6   7         // 第二种:数组变量的声明,和创建数组可以用一条语句完成   8         int[] arr1 = new int[5];   9     }  10 }

贴士:在 IDEA 编辑器下输入fori 然后回车就能生成  for (int i = 0; i < ; i++) { } ,输入 foreach 然后回车就能生成  for (:) { } 

在上面的代码中我们声明了数组 arr,但是并没有为其赋值,那么系统将会自动为每个数组元素赋值,默认为 0,我们可以对每个元素赋值,也可以在初始化数组的时候赋值,如下代码:

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         // 声明整型数组变量 arr,   4         int[] arr = new int[5];   5         for (int i = 0; i < arr.length; i++) {   6             // arr 数组默认值为 0   7             System.out.println(arr[i]); // 0 0 0 0 0   8         }   9  10         // 声明整型数组变量 arr1,  11         int[] arr1 = new int[5];  12         arr1[0] = 0;  13         arr1[1] = 1;  14         arr1[2] = 2;  15         arr1[3] = 3;  16         arr1[4] = 4;  17         for (int i = 0; i < arr1.length; i++) {  18             // 输出 arr1 数组值  19             System.out.println(arr1[i]); // 0 1 2 3 4  20         }  21  22         // 声明整型数组变量 arr2,arr12 赋值 [0,1,2,3,4]  23         int[] arr2 = {0, 1, 2, 3, 4};  24         for (int i = 0; i < arr2.length; i++) {  25             // 输出 arr2 数组值  26             System.out.println(arr2[i]); // 0 1 2 3 4  27         }  28     }  29 }

 上面的代码我们使用 for 循环输出的数组每一个元素,我们还可以使用 for-each 输出:

1 public class HelloWorld {  2     public static void main(String[] args) {  3         // 声明整型数组变量 arr,  4         double[] arr = {0.1, 1.2, 2.3, 3, 4};  5         for(double i : arr){  6             System.out.println(i); // 0.1 1.2 2.3 3.0 4.0  7         }  8     }  9 }

我们也可以将一个数组中的元素复制到另一个数组中去,如下:

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr1 = {0, 1, 2, 3, 4};   4         int[] arr2 = new int[5];   5         /**   6          * arr1:源数组   7          * 1:源数组起始下标   8          * arr2:目标数组   9          * 0:目标数组的起始下标  10          * 4:要复制的元素的个数  11          * */  12         System.arraycopy(arr1, 1, arr2, 0, 4);  13         for (int i = 0; i < arr2.length; i++) {  14             System.out.println(arr2[i]); // 1 2 3 4 5 0  15         }  16     }  17 }

当然复制是不能超范围的,例如我们定义 arr2 的 length 为 3,即  int[] arr2 = new int[3]; ,那么要复制的个数已经超过了目标数组的长度,程序就会报错。

数组的长度在创建后是不可改变的,但是我么可以对其进行扩容,所谓扩容是指创建一个更大的新数组并将其原有数组的内容复制到其中,可以通过  Arrays.copyOf( ) 方法实现。

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr1 = {0, 1, 2, 3, 4};   4         // arr1 源数组  arr1.length+1 扩容数组长度   5         arr1 = Arrays.copyOf(arr1, arr1.length + 1);   6         for (int i = 0; i < arr1.length; i++) {   7             System.out.println(arr1[i]); // 0 1 2 3 4 0   8         }   9  10     }  11 }

当然我们也可以岁原有数组进行减容,只需要把 扩容数组长度 小于源数组即可,那么源数组末尾多出的元素将会被去掉。

java 为我们提供了一种简便的数组排序的方法, Arrays.sort( ) 

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr = {1,4,5,67,23,3};   4         Arrays.sort(arr);   5         for (int i = 0; i < arr.length; i++) {   6             System.out.println(arr[i]); // 1 3 4 5 23 67   7         }   8   9     }  10 }