Array是引用類型, 它是存儲長度固定的結構, 存儲的元素必須同類型
?? 長度在創建時被固定,之后再也不能更改
each item in an array is called an element, accessed by its numerical index(index從0開始)
數組的聲明
數組的聲明包含兩個部分: 數組的類型和數組的名字
數組的類型寫作type[], type是數組元素的類型, []表示該數組類型變量指向一個數組對象
? 數組長度在聲明時不指定
數組聲明并不真正的在內存中創建一個數組對象,只是告知編譯器此處有一個變量將指向數組類型
? 多維數組遵從上述聲明定義, 實質上Java中并沒有多維數組的概念。多維數組只是元素類型是數組的數組而已
public void declareArray() {
int[] anArray;
/* 多維數組聲明,數組元素類型是int[] */
int[][] arrayOfArray;
}
數組的實例化和訪問
實例化一個數組對象, 需要使用new操作符. 實例化時可顯式的指定數組的長度,也可讓編譯器推斷出長度(只能在聲明的同時使用)
數組對象通過索引訪問它存儲的元素, 數組對象的長度通過屬性length可以獲取
public void initializeArray() {
anArray = new int[10]; // 顯式的指定長度
arrayOfArray = new int[10][4]; // 由外到內指定各維度數組對象的長度,10行4列
anArray = { 1, 2 }; // 錯誤: 推斷長度只能在聲明時使用
int[] anArr = {1, 2}; // 推斷長度
}
數組操作
對于常見的數組操作,如復制、排序、查詢元素等,Java提供了一個工具類java.util.Arrays
import java.util.Arrays;
import java.util.stream.Stream;
public void manipulateArray() {
String[] arraySource = {"A", "B", "C", "D"};
/* 復制 "B" "C" */
String[] arrayTo = Arrays.copyOfRange(arraySource, 1, 3);
/* 排序 - 數組元素是引用類型的,可以提供一個Comparator*/
Arrays.sort(arraySource, (o1, o2)->{ return o1.compareTo(o2); });
/* 查詢 */
int indexOfValue = Arrays.binarySearch(arraySource, "B");
/* 判斷相等 */
boolean addressEquals = Arrays.equals(arraySource, arrayTo); // 判斷兩個數組變量, 是否指向同一個地址
boolean elementsEquals = Arrays.equals(arraySource, 1, 3, arrayTo, 1, 3); // 指定區間內的數組元素是否一一相等
/* 轉換為字符串 */
String arrayStr = Arrays.toString(arraySource);
/* 轉換為流 - 流具備非常好的性質 */
Stream<String> strStream = Arrays.stream(arraySource);
strStream.map(elem -> elem + "|").forEach(System.out::print);
}
System.arraycopy()提供了快速復制操作,將一個數組的元素復制到另一個元素上
public void copyArray() {
String[] arrayFrom = {"A", "B", "C", "D"};
String[] arrayTo = new String[2];
System.arraycopy(arrayFrom, 1, arrayTo, 0, 2);
}