数组基本概念:
目前,就自己小白的基础而言,我对于数组的理解仅停留在如何创建一个数组,如何通过整型索引值访问数组的元素,且数组一旦定义好后,它的长度是固定的,大多数情况下好像了解这些就够了,但是有时候如果需要较为复杂的运算,那么实际上是有必要在数组或是容器上进行合理的选择的。
自动包装机制以及泛型的产生使得容器几乎与数组具有相同的优势了,可能数组现存的相对于容器的优势就在于效率问题了,数组的访问借助于“[]”语法,而List则可以使用add(),get()方法等;对象数组保存的是对象的引用,而基本类型数组则直接保存基本类型的值。
数组的初始化,举例说明如下:
public class Test1 { public static void main(String[] args) { // 数组对象初始化方式一: Grass[] species = new Grass[5]; // 数组对象初始化方式二: Grass[] specie2 = {new Grass("element1"), new Grass("element2")}; // 多维数组 String[] str1 = new String[]{"hello","you","are","my","destiny"}; Integer[][] int1 = {{1,3},{2,4},{6,8}}; // 数组遍历 for (String str : str1) { System.out.print(str); System.out.println(); } for (int i = 0; i < str1.length; i++) { System.out.print(str1[i]); System.out.println(); } for (Integer[] i : int1) { for (int j : i) { System.out.print("数组元素" + j + " "); } } } }
从上面的栗子也可以看出for循环与foreach循环的区别之处。
Arrays类
java.util类库中提供了Arrays类,它提供了一套用于数组的static实用方法,主要有以下几种:
1 public class ArrayCommonMethod { 2 public static void main(String[] args) { 3 int[] i = new int[7]; 4 int[] j = new int[10]; 5 Arrays.fill(i, 50); 6 Arrays.fill(j, 90); 7 // java标准类库提供的的static方法System.arraycopy() 8 // 用该方法复制数组要比for循环快很多 9 System.arraycopy(i, 0, j, 0, i.length-1); 10 System.out.println("j = " + Arrays.toString(j)); 11 // 比较两个数组的大小 12 int[] k = new int[]{50, 50, 50, 50, 50, 50, 50}; 13 System.out.println(Arrays.equals(i, j)); 14 System.out.println(Arrays.equals(i, k)); 15 16 // 排序 17 String[] str1 = new String[]{"hello","you","are","my","destiny"}; 18 System.out.println("排序前:" + Arrays.toString(str1)); 19 Arrays.sort(str1); 20 System.out.println("排序后:" + Arrays.toString(str1)); 21 System.out.println(Arrays.binarySearch(str1, "are")); 22 System.out.println(Arrays.binarySearch(str1, "hello")); 23 } 24 }
总结:随着java版本的更新,容器的优势越来越突出,所以能使用容器的地方,尽量使用容器,除非你能够证明使用数组比使用容器的性能要好的时候才会选用数组代替容器。