Java中陣列的定義及初始化
阿新 • • 發佈:2018-11-07
文章目錄
1. 定義及初始化
1. 1動態初始化(宣告並開闢陣列)
陣列型別[] 陣列名 = new 資料型別[陣列長度];
其中,資料型別可以是8種基本的資料型別,也可以是引用資料型別。
注意:
- 在給陣列命名的時候,一般在陣列名後加一個 s 表示這是一個包含多個元素的陣列(與單個變數區分)。
- 當陣列採用動態初始化開闢空間之後,陣列之中的每個元素都是該資料型別的預設值。
資料型別 | 預設初始化 |
---|---|
byte、short、int、long | 0 |
foat、double | 0.0 |
char | 一個空字元,即 ‘\u0000’ |
boolean | false |
引用資料型別 | null,表示變數不引用任何物件 |
- 陣列名稱.length:取得陣列長度(陣列長度可以由屬性length獲得)。
- 陣列遍歷推薦使用for-each迴圈(僅限於陣列內容讀取),要修改陣列內容,還是使用常規for迴圈:for(int x: 陣列名稱) {……}
public class Study02{
public static void main(String[] args){
int[] arrays = new int[5]; //定義並開闢了一個長度為3的陣列
// 可以將上面程式碼分成兩句來寫
int[] array = null; // 宣告一個長度int[]型別的變數,變數會佔用一塊記憶體空間,它沒有分配初始值。
array = new int[5]; //建立一個長度為5的陣列,將陣列的地址賦給變數arrays。
for(int i = 0; i < arrays.length; i++)
{
System.out.println("arrays[" + i + "] = " + arrays[i] + " ");
}
arrays[0] = 10; //陣列的第一個元素
arrays[1] = 20; //陣列的第二個元素
// 陣列遍歷
for(int x : array)
{
System.out.println(array[x]);
}
}
}
1.2 靜態初始化
簡化格式:
資料型別[] 陣列名稱 = {值, 值, …};
完整格式(推薦):
資料型別[] 陣列名稱 = new 資料型別[]{值, 值, …};
注意:
a. 通過陣列下標索取來取得元素,下標預設從0開始。陣列下標超出陣列長度,陣列越界異常(執行時異常)。
b. 陣列屬於引用資料型別,在使用之前一定要開闢空間(例項化),否則就會產生"NullPoninterException"。
int[] arrays = {1, 2, 3, 4, 5};
int[] arrays = new int[]{1, 2, 3, 4, 5};
陣列的最大缺陷:長度固定(存在越界問題)。
2. 引用傳遞
陣列作為引用資料型別,也可以發生引用傳遞。
引用傳遞空間:同一塊堆記憶體空間可以被不同的棧記憶體所指向。
範例: 多個棧記憶體指向相同的堆記憶體。
public class Study02{
public static void main(String[] args){
int[] arr = new null;
int[] temp = null; // 宣告物件
arr = new int[3]; // 開闢一個長度為3的陣列
System.out.println(arr.length);
arr[0] = 1; // 陣列第一個元素
arr[1] = 2; // 陣列第二個元素
arr[2] = 3; // 陣列第三個元素
for(int i = 0; i < arr.length; i++)
{
//通過迴圈控制索引下標更改
System.out.println(arr[i]);
}
temp = arr; // 發生引用傳遞,不能出現[]
temp[0] = 55; // 修改資料
System.out.println(arr[0]);
}
}
注意: 在陣列定義時直接設定內容,根據值的個數確定長度,且長度不可修改。
3. 二維陣列的基本瞭解
二維陣列的初始化
- 動態初始化
資料型別[][] 物件陣列 = new 資料型別[行個數][列個數]; - 靜態初始化
資料型別[][] 物件陣列 = new 資料型別[][]{{值, 值, …}, {值, 值, …}, …};
陣列的陣列就是二維陣列。
舉例:定義一個二維陣列
public class ArrayDemo{
public static void main(String[] args){
//陣列並不是等列陣列
int[][] data = new int[][]{
{1, 2, 3},
{4, 5},
{6, 7, 8, 9}};
for(int i = 0; i < data.length; i++)
{
for(int j = 0; j < data[i].length; j++)
{
System.out.print("data[" + i + "][" + j + "]="
+ data[i][j] + " ");
}
System.out.println();
}
}
}
4. 陣列與方法的互操作
4.1 方法接收陣列
舉例:
public class ArrayDemo{
public static void main(String[] args){
int[] data = new int[]{1, 2, 3, 4, 5};
printArray(data); //其效果等價於 int[] temp = data;
}
public static void printArray(int[] temp){
for(int i = 0; i < temp.length; i++)
{
System.out.print(temp[i] + " ");
}
System.out.println();
}
}
4.2 方法返回陣列
舉例:
public class ArrayDemo{
public static void main(String[] args){
int[] data = init();
printArray(data);
}
//定義一個返回陣列的方法
public static int[] init()
{
return new int[] {11, 22, 33, 44, 55};//匿名陣列:只使用一次就失效了
}
public static void printArray(int[] temp){
for(int i = 0; i < temp.length; i++)
{
System.out.print(temp[i] + " ");
}
System.out.println();
}
}
現在陣列上發生了引用傳遞,意味著在接收陣列時可以修改陣列。
4.3 方法修改陣列
舉例:
public class ArrayDemo{
public static void main(String[] args){
int[] data = init();//接收了陣列,發生了引用傳遞,可以修改返回的陣列
bigger(data);
printArray(data);
}
//定義一個返回陣列的方法
public static int[] init()
{
return new int[] {11, 22, 33, 44, 55};//匿名陣列:只使用一次就失效了
}
//將陣列中每個元素的值擴大兩倍
public static void bigger(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
arr[i] *= 2; //每個元素擴大兩倍
}
}
//列印陣列
public static void printArray(int[] temp){
for(int i = 0; i < temp.length; i++)
{
System.out.print(temp[i] + " ");
}
System.out.println();
}
}
5. Java對陣列的支援
5.1 排序
java.util.Arrays.sort(陣列名稱)
支援所有基本資料型別
內部使用雙軸排序(瞭解)
import java.util.Arrays;
public class Arrayss{
public static void main(String[] args){
int[] arr1 = new int[]{2, 3, 6, 4, 7};
char[] arr2 = new char[]{'a', 'v', 'e', 'b'};
//排序
Arrays.sort(arr1);
Arrays.sort(arr2);
PrintArrays(arr1);
PrintArrays(arr2);
}
//列印陣列
public static void PrintArrays(int[] data){
for(int x : data)
{
System.out.print(x + " ");
}
System.out.println();
}
public static void PrintArrays(char[] data){
for(int x : data)
{
System.out.print((char)x + " ");
}
System.out.println();
}
}
5.2 陣列的拷貝
5.2.1 陣列的部分拷貝
System.arraycopy(源陣列名稱, 源陣列開始點, 目標陣列名稱, 目標陣列開始點, 拷貝長度);
源陣列data為:1, 2, 3, 4, 5,6
目標陣列arr為:11, 22,33,44,55,66,77
經過 System.arraycopy(data, 1, arr, 2, 3); 拷貝後,從data[1]開始完後拷貝3個元素,存放在從arr[2]開始的arr陣列中。
部分拷貝後:
目標陣列arr為:11,22,2,3,4,66,77
public class Arrayss{
public static void main(String[] args){
int[] data = new int[]{1, 2, 3, 4, 5, 6};
int[] arr = new int[]{11, 22, 33, 44, 55, 66, 77};
System.out.print("data陣列為:");
printArrays(data);
System.out.print("arr陣列為:");
printArrays(arr);
System.arraycopy(data, 1, arr, 2, 3);
System.out.println("拷貝後兩個陣列為:");
System.out.print("data陣列為:");
printArrays(data);
System.out.print("arr陣列為:");
printArrays(arr);
}
public static void printArrays(int[] data){
for(int x : data)
{
System.out.print(x + " ");
}
System.out.println();
}
}
5.2.2 陣列全拷貝
需引入java.util.Arrays;
==陣列型別[] 目標陣列名 == = Arrays.copyOf(源陣列名稱, 新陣列長度);
舉例:
import java.util.Arrays;
public class Arrayss{
public static void main(String[] args){
int[] data = new int[]{1, 2, 3, 4, 5, 6};
int arr[] = Arrays.copyOf(data, 3);
System.out.print("arr陣列為:");
printArrays(arr);
}
public static void printArrays(int[] data){
for(int x : data)
{
System.out.print(x + " ");
}
System.out.println();
}
}
使用該方法無需實現使用new關鍵字對物件進行記憶體單元的分配。