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]
           ↑

results matching ""

    No results matching ""