---
# System prepended metadata

title: Array
tags: [Java]

---

[toc]

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

# Array

### 宣告陣列變數
```java
int[] arr;
int arr2[]; // 不建議
```

---
### 建立陣列
建立一個有10個int的陣列, 並assign到arr變數
```java
arr = new int[10];
```
其他建立範例
```java
int[] arr = new int[3];
// 此時arr = {0, 0, 0}

String[] arr2 = new String[3];
// 此時arr2 = {null, null, null}
```

---
### 以初始值建立陣列

請養成在`,`後空一格的好習慣。
```java
int[] arr = {1, 2, 3, 4, 5};
String names = {"Olympic", "Titanic", "Britannic"};
```
```{}```方法(初始值) **只有在宣告時能使用**
不能再```arr = {6, 7, 8, 9, 10};``` 來進行更改內容

---
### 陣列取值, 設值
在學取值前，我們要先懂 index(索引) 的概念

首先，我們要取值的方式就是 ==arr[(index)]== (arr 是 array 的縮寫)

<!-- 假設今天我想取 arr[3] 
電腦會先找到 arr 這個陣列的記憶體位置
在往後數3個 (因為陣列的記憶體是連續排列的)
以此找到 arr[3] -->

有個神奇的特性，他的 index(索引) 是從0開始算的
意思就是如果==陣列長度為4，那他的 index 會是 0~3==
因此，剛剛我們取的 ==arr[3] 其實是陣列的第四項==

所以在取值 & 設值的時候我們通常這樣設
```java
int[] arr = new int[4];

//設值

// 把arr的第一項設置為122
// {122, 0, 0, 0}
arr[0] = 122; 

// 把arr的第一項設置為97
// {122, 97, 0, 0}
arr[1] = 97;

// 取值
int k = arr[0];
System.out.println(k); // 122
```
---
陣列長度(int): ```arr.length```
(陣列長度無法更改)

<!-- (補充)
index從0開始算的原因：
從剛剛的介紹中，我們已經了解了取值的過程
而其中 index 起始值為 0 原因是因為電腦 arr 的記憶體位址存的是第一個數值，而程式語言開發時為了防止不必要的減法運算所以從0開始
不必要的減法運算：
假設你要取 arr[n]，電腦會在得到記憶體位子後，往後數 n 個位置，那如果今天 index 由 1 開始，便要往後數 n-1 ，開發員不希望不必要的 n-1 -->

---
### 複製陣列
在`System` class 有
```java
public static void arraycopy(Object src, int srcPos,
                             Object dest, int destPos, int length)
```
能使用。

---

### 多維陣列 
```java=
int[][] arr;
int[][] arr = new int[3][3];
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
```