Arrays方法與System方法
Arrays.toString()
傳回字串。
需要搭配System.out.println()
,才能印出陣列內容,因為此方法只是傳回字串,沒有印出的功能。
1
2
int[] arr = {100, 20, 64, 1, 98};
System.out.println(Arrays.toString(arr));
[100, 20, 64, 1, 98]
Arrays.copyOf()
複製陣列。
語法
語法
目標陣列 = Arrays.copyOf(要複製的來源陣列,要複製的大小);
1
2
3
int[] arr = {100, 20, 64, 1, 98};
int[] dest = Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(dest));
[100, 20, 64, 1, 98]
複製大小超出陣列大小
基本型態
會根據陣列類型超出的索引,會指派預設值,以下範例陣列是int基本型態,預設值為0。
1
2
3
int[] arr = {100, 20, 64, 1, 98};
int[] dest = Arrays.copyOf(arr, arr.length + 5);
System.out.println(Arrays.toString(dest));
[100, 20, 64, 1, 98, 0, 0, 0, 0, 0]
類別
以下範例陣列是Integer,超出的索引,設為null。
1
2
3
Integer[] arr = {100, 20, 64, 1, 98};
Integer[] dest = Arrays.copyOf(arr, arr.length + 5);
System.out.println(Arrays.toString(dest));
[100, 20, 64, 1, 98, null, null, null, null, null]
大小設為0
0是建立空的陣列。
1
2
3
Integer[] arr = {100, 20, 64, 1, 98};
Integer[] dest = Arrays.copyOf(arr, 0);
System.out.println(Arrays.toString(dest));
[]
不能設為負數
以下程式碼,會產生例外。
1
2
3
Integer[] arr = {100, 20, 64, 1, 98};
Integer[] dest = Arrays.copyOf(arr, -1);
System.out.println(Arrays.toString(dest));
Exception in thread "main" java.lang.NegativeArraySizeException: -1
System.arraycopy()
語法
System.arraycopy(
來源陣列,
從來源陣列那一個位置開始複製,
目標陣列,
複製到目標陣列的那一個位置開始新增,
要複製多少個);
以下程式碼從來源陣列第0個位置開始複製,複製到目標陣列的第0個位置開始新增,複製5個。
1
2
3
4
int[] source = {100, 20, 64, 1, 98};
int [] dest = new int[source.length];
System.arraycopy(source, 0, dest, 0, source.length);
System.out.println(Arrays.toString(dest));
[100, 20, 64, 1, 98]
複製大小超出來源陣列大小
超出「來源陣列」大小會產生例外,例外訊息的意思是來源陣列只有5個,沒有100個。
跟Arrays.copyOf()不同,Arrays.copyOf()超出來源陣列大小,會自動產生預設值。
1
2
3
4
int[] source = {100, 20, 64, 1, 98};
int [] dest = new int[source.length];
System.arraycopy(source, 0, dest, 0, 100);
System.out.println(Arrays.toString(dest));
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: last source index 100 out of bounds for int[5]
複製大小自訂
複製大小設為來源陣列大小-1,最後一個元素是預設值。
int基本型態,預設值為0,若是類別,預設值是null。
1
2
3
4
int[] source = {100, 20, 64, 1, 98};
int [] dest = new int[source.length];
System.arraycopy(source, 0, dest, 0, source.length - 1);
System.out.println(Arrays.toString(dest));
[100, 20, 64, 1, 0]
System.currentTimeMillis()
取得現在時間到1970-01-01的毫秒,通常用來計算程式執行時間。
1秒 = 1000毫秒
0.5秒 = 500毫秒
0.1秒 = 100毫秒
0.001秒 = 1毫秒
請自行換算,以下執行結果是以毫秒為單位。
1
2
3
4
long startT = System.currentTimeMillis();
// 中間是要執行的程式碼
long endT = System.currentTimeMillis();
System.out.println("執行時間 = " + (endT - startT));
System.exit(0)
退出程式。
1
2
3
4
5
6
7
public class Test {
public static void main(String[] args) {
System.out.println("print1");
System.exit(0);
System.out.println("print2");
}
}
print1
Arrays.fill()
把陣列中的值全設為自訂預設值。
語法
Arrays.fill(陣列, 自訂預設值);
1
2
3
int[] arr = {1, 2, 3};
Arrays.fill(arr, 100);
System.out.println(Arrays.toString(arr));
[100, 100, 100]
Arrays.equals()
比較2個陣列中的值是否相同。
1
2
3
4
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 5};
boolean bool = Arrays.equals(arr1, arr2);
System.out.println(bool);
false
Arrays.asList
把參數轉成List。
1
2
List<Integer> list = Arrays.asList(4, 5, 6);
System.out.println(list);
[4, 5, 6]
Arrays.binarySearch
要先排好序,才能使用binarySearch()方法,會傳回找到的索引位置。
1
2
3
4
5
6
int[] arr = {-1, 5, 1, 10, 0, 7};
// 由小到大
Arrays.sort(arr);
System.out.println("排序後 : " + Arrays.toString(arr));
int index = Arrays.binarySearch(arr, 7);
System.out.println(index);
找不到
找不到,會傳回負的應該插入的下一個位置。
1
2
3
4
5
6
int[] arr = {-1, 5, 1, 10, 0, 7};
// 由小到大
Arrays.sort(arr);
System.out.println("排序後 : " + Arrays.toString(arr));
int index = Arrays.binarySearch(arr, 3);
System.out.println(index);
排序後 : [-1, 0, 1, 5, 7, 10]
-4
要找尋3,但3沒在陣列中,會傳回負號(-)應該插入的位置(3) + 1 = -4
0 1 2 3 4 5
[-1, 0, 1, 5, 7, 10]
↑