Array
23 April 2020
Java - Array
Array 本身是reference type,array裡面的element取決於data的base type 而已array為參數傳進function跟C依樣,裡面改,外面值也改。
int[5] a = new Int[5];
int[5]b = a; // a和b指向同個地方,所以一邊改,另一邊也會改
Create Array
如果沒assign值,會用那個basetype的default value
1. double[] score = new double[5],跑for assign值
2. int[] a = {1,2,3}
score.length -> 5
score.length = 10 // invalid, 應該是因為宣告private之類的
注意如果是object array要注意,他是create 5個object variable,每個object variable要new給他一個object
Date[] d = new Date[5]
for(int i = 0 ; i < 5 ;i++)
d[i] = new Date();
String object & character array
char array在print時像C一樣是string方式印出 char array和string object的轉換
char[] a = {'h','e','l','l','o'};
String s = new String(a,[st],[len]);
st : 從array哪個地方開始
len : 複製多長的array
Return array
跟return object依樣,因此不會像C一樣,function結束就被free掉,主因就是array產生方式適用new,所以data不是存在stack裡,他這個等於是return array的位址。
public static int[] test(int[] a){...}
for-each loop
有些特定的class(collection class)他並沒有index來使用for loop來iterate, 因此要使用這種方式,跟python很像
double[] a = new double[4];
for(double ele : a){...}
variable number of parameter
有些function像是max,min要找一堆數字中的最大最小的 第一個想法是包成array傳進來 第二個可以有variable number of paramter parameter傳入的特殊寫法
public static int test(int ... arg){
int largest = Integer.INT_MIN;
for(int ele : arg){
largest = ele;
}
// or
for(int i = 0 ; i < arg.length; i++)
}
privacy leak
因為Array本身也是object,如果element也是mutable object,很有可能發生privacy leak 因此要回傳array時,要new一個array,內部的元素每個也都要new
public Date[] getArr(){
Date[] tmp = new Date[5];
for(int i = 0 ; i < 5 ; i++)
tmp[i] = new Date(a[i]);
return tmp;
}
enum
產生一個type,值是自訂的
這個type的變數只能是enum內部宣告的其中一個值
可以用==來比較兩個workday type的變數值ㄧ不一樣
enum workday {Mon,Tue,Wen,...}; => 產生一個workday type
workday a = workday.Mon;
System.out.println(a) -> Mon 但這個不是String type!!!!
這個object有自己的method,見課本p.427
Multi-dimension Array
create array
char[][] a = new char[30][100];
a.length -> 30
a[i].length -> 100
Ragged arrays
java沒有限定一定要 a[3][5]這樣的格式,
可以宣告a[3][]
int[][] a = new int[3][];
a[0] = new int[5] -> a[0][5]
a[1] = new int[4] -> a[1][4]
a[2] = new int[2] -> a[2][2]
即每一層的數量可以不同
argument
public static int[][] show(int[][] a){...}