技巧|數組
1.關於數組的特點
1)在Java中,無論使用數組或容器,都有邊界檢查。如果越界操作就會得到一個RuntimeException異常。
2)數組只能儲存特定類型。數組可以儲存基本類型,容器則不能。容器不以具體的類型來處理對象,它們將所有對象都按Object類型處理。
3)容器類只能儲存對象的引用。而數組既可以建立為直接儲存基本類型,也可以儲存對象的引用。在容器中可以使用封裝類,如Integer、Double等來實現儲存基礎資料型別 (Elementary Data Type)值。
4)對象數組和基本類型數組在使用上幾乎是相同的;唯一的區別是對象數組儲存的是引用,基本類型數組儲存基本類型的值。
2.關於數組定義
1)數組在定義時,不能分配空間。只有定義完後,可以給數組分配空間。
int num[];
num=new int[3];
或
int num[]=new int[3];
注意
int [] num=new int[]{1,2,3}; //ok
int [] num=new int[3]{1,2,3}; //error;
2)可以這樣定義二維數組。
int [][] num;
//or
num=new int[3][];
num[0]=new int[5];
num[1]=new int[3];
num[2]=new int[2];
3)二維數組賦初值。
int [][] num=new int[][]{1,2,3,4,5,5}; //errorint [][] num=new int[][]{{1,2,3},{4,5,5}}; //okint [][] num=new int[2][]{{1,2,3},{4,5,5}}; //errorint [][] num={{1,2,3},{4,5,6}}; //ok |
3.關於數組初始化
對象數組在建立之初會自動初始化成null,由未經處理資料類型構成的數組會自動初始化成零(針對數實值型別),(Char)0 (針對字元類型)或者false (針對布爾類型)。
4.數組有關引用的問題
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2;
a2 = a1;//這裡只是複製了一個引用
看以下代碼:
public class Arrays { public static void main(String[] args) { int[] a1 = { 1, 2, 3, 4, 5 }; for (int i = 0; i < a1.length; i++) System.out.println("a1[" + i + "] = " + a1[i]); int[] a2; a2 = a1; for (int i = 0; i < a2.length; i++) a2[i]++; System.out.println("-----after change a2------"); for (int i = 0; i < a1.length; i++) System.out.println("a1[" + i + "] = " + a1[i]); System.out.println("-----after change a2[0]------"); a2[0] = 333; System.out.println("a2[0]=" + a2[0]); System.out.println("a1[0]=" + a1[0]); System.out.println("----- a2------"); for (int i = 0; i < a2.length; i++) System.out.println("a2[" + i + "] = " + a2[i]); }} |
結果:
a1[0] = 1
a1[1] = 2
a1[2] = 3
a1[3] = 4
a1[4] = 5
-----after change a2------
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
-----after change a2[0]------
a2[0]=333
a1[0]=333
----- a2------
a2[0] = 333
a2[1] = 3
a2[2] = 4
a2[3] = 5
a2[4] = 6
數組a1和a2始終在操作同一個對象。
5.關於數組的相關操作
1)在Java中,所有的數組都有一個預設的屬性length,用於擷取數組中元素的個數。
2)數組的複製:System.arraycopy()。
3)數組的排序:Arrays.sort()。
4)在已排序的數組中尋找某個元素:Arrays.binarySearch()。
6.關於數組的排序操作
1)對象數組排序,必須實現Comparable介面。
import java.util.Arrays;class Student implements Comparable { int num; String name; Student(int num, String name) { this.num = num; this.name = name; } public String toString()// 重寫toString()方法,以便main:System.out.println(ss[i]); { return "number=" + num + "," + "name=" + name; } public int compareTo(Object o) { Student s = (Student) o; return num > s.num ? 1 : (num == s.num ? 0 : -1); }} class ArrayTest { public static void main(String[] args) { Student[] ss = new Student[] { new Student(1, "zhangsan"), new Student(2, "lisi"), new Student(3, "wangwu") }; Arrays.sort(ss); for (int i = 0; i < ss.length; i++) { System.out.println(ss[i]); } }} |
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=wangwu
2)以num為第一關鍵字,name為第二關鍵字排序
import java.util.Arrays; class Student implements Comparable { int num; String name; Student(int num, String name) { this.num = num; this.name = name; } public String toString() { return "number=" + num + "," + "name=" + name; } public int compareTo(Object o) { Student s = (Student) o; int result = num > s.num ? 1 : (num == s.num ? 0 : -1); if (0 == result) { result = name.compareTo(s.name); } return result; }} class ArrayTest { public static void main(String[] args) { Student[] ss = new Student[] { new Student(1, "zhangsan"), new Student(2, "lisi"), new Student(3, "wangwu"), new Student(3, "mybole") }; Arrays.sort(ss); for (int i = 0; i < ss.length; i++) { System.out.println(ss[i]); } }} |
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=mybole
number=3,name=wangwu
7.關於java.util.Arrays
1)java.util.Class Arrays’s architecture
java.lang.Object
|
+--java.util.Arrays
2)說明
這個類提供的基本上都是靜態方法,使用者進行數組操作,binarySearch():數組中特定元素的尋找,equals():比較兩個數組是否相等(在相同位置上的元素是否相等),fill():數組填充,sort():數組排序。