帶你粗略瞭解Java數組的使用
數組的定義
數組:可以看作相同類型元素的一個集合,且在內存中是一塊連續的內存空間
註意:
C語言中,數組的內存在棧上
在Java中,數組的內存在堆上
數組的創建及初始化:
1.數組的創建:
基本語法格式:
T[ ] 數組名 = new T[N];
.
① T,即Type,表示:數組中存放元素的類
② T[ ], 表示:數組的類型
③ N, 表示:數組的長度
舉例:
創建一個可以容納10個int類型元素的數組 int[] array1 = new int[10]; 創建一個可以容納5個double類型元素的數組 double[] array2 = new double[5];
2.數組的初始化
數組的初始化主要分為動態初始化和靜態初始化
①動態初始化:
基本語法格式:
int[ ] array = new int[10]
在創建數組時,直接指定數組中元素的個數
②靜態初始化:
基本語法格式:
int[ ] array1 = new int[ ] {0,1,2,3,4,5,6};
double[ ] array2 = new double[ ]{1.0, 2.0, 3.0, 4.0,5.0};
註意事項:
- 如果沒有對數組進行初始化,數組中元素有其默認值
如果數組中存儲元素類型為基類類型,默認值為基類類型對應的默認值
如果數組中存儲元素類型為引用類型,默認值為null
- 靜態初始化無需指定數組的長度,編譯器在編譯時會根據{ }中元素個數來確定數組的長度
- 靜態初始化時,{ }中數據類型必須與[ ]前數據類型一致、
- 靜態初始化可以簡寫,省去後面的new T[ ]
- 如果不確定數組當中內容時,使用動態初始化,否則建議使用靜態態初始化
數組的使用
1.數組的長度:
數組的長度屬性: 每個數組都具有長度,而且是固定的,Java中賦予瞭數組的一個屬性,可以獲取到數組的長度,語句為:數組名.length
int[ ] array = new int[ ]{1,2,3,4,5,6};
int len = array.length;
此處的 length 是屬性
2.數組的訪問:
數組在內存中是一段連續的空間,空間的編號都是從0開始的,依次遞增,該編號稱為數組的下標,數組可以通過下標訪問其任意位置的元素
索引:每一個存儲到數組的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱為數組索引 (index),可以通過數組的索引訪問到數組中的元素
由數組的長度知,屬性 length 的執行結果是數組的長度,int類型結果,則數組的最大索引值為數組名.length-1
格式:
數組名[索引]數組名[索引] = 數值,為數組中的元素賦值變量 = 數組名[索引],獲取出數組中的元素
public static void main(String[] args) { //定義存儲int類型數組,賦值元素1,2,3,4,5 int[] arr = {1,2,3,4,5}; //為0索引元素賦值為6 arr[0] = 6; //獲取數組0索引上的元素 int i = arr[0]; System.out.println(i); //直接輸出數組0索引元素 System.out.println(arr[0]); }
註意事項:
- 數組是一段連續的內容空間,因此支持隨機訪問,即通過下標訪問快速訪問數組中任意位置的元素
- 下標從0開始,介於[0, N) 之間不包含N,N為元素個數,不能越界,否則會報出下標越界異常
3.數組的遍歷:
“遍歷”:是指將數組中的所有元素都訪問一遍
這裡用打印的方式展示遍歷:
int[] array = new int[]{1,2,3,4,5,6}; int len = array.length; for(int i=0;i<len;i++){ System.out.println(array[i]); }
延申:
Java中的打印方式,出瞭上述的,還有foreach,即:for( 遍歷的數組內容 :數組本身)
代碼如下:
for (int val:array) { System.out.println(val+" "); }
二者區別:
for循環遍歷打印數組,需要索引,而foreach不需要,若單純的想要遍歷數組,用foreach即可
4.使用數組交換兩個整數
//使用數組實現交換兩個整數 public static void swap(int[] array){ int tmp = array[0]; array[0] = array[1]; array[1] = tmp; } public static void main(String[] args) { int[] array1 = {10,20}; System.out.println("交換前:"+array1[0]+" "+array1[1]); swap(array1); System.out.println("交換後:"+array1[0]+" "+array1[1]); }
輸出結果:
交換前:10 20
交換後:20 10
交換原理:
5.以字符串的形式輸出數組:
使用方法toString 需要調用包 java.util.Arrays
int[] arr = {1,2,3,4,5,6}; String ret = Arrays.toString(arr); System.out.println(ret);
理解引用類型:
1.基本類型變量與引用類型變量的區別
基本數據類型創建的變量,稱為基本變量,該變量空間中直接存放的是其所對應的值;
引用數據類型創建的變量,一般稱為對象的引用,其空間中存儲的是對象所在空間的地址
public static void func() { int a = 10; int b = 20; int[] arr = new int[]{1,2,3}; }
在上述代碼中:a,b,arr,都是函數內部的變量,因此其空間都在main方法對應的棧幀中分配;
a、b是內置類型的變量,因此其空間中保存的就是給該變量初始化的值。
array是數組類型的引用變量,因為都為引用其內部保存的是數組在堆空間中的首地址
引用變量並不直接存儲對象本身,而存儲的是對象在堆中空間的起始地址,通過該地址,引用變量便可以去操作對象。有點類似C語言中的指針,但是Java中引用要比指針的操作更簡單
2.認識null
null 在 Java 中表示 “空引用”,也就是一個不指向對象的引用,即:空對象
int[ ] arr = null; //arr引用的是一個空對象
System.out.println(arr[0]);
此處不能訪問0下標,因為沒有所指對象
null 的作用類似於 C 語言中的 NULL (空指針), 都是表示一個無效的內存位置,因此不能對這個內存進行任何讀寫操作,Java 中並沒有約定 null 和 0 號地址的內存有任何關聯
3.數組作為方法的返回值
將一個數組內容擴大二倍:
public static int[] fun(int[] array){ int[] tmp = new int[array.length]; for (int i = 0; i <array.length; i++) { tmp[i] = array[i] * 2; } return tmp; } public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8}; int[] ret = fun(array); System.out.println(Arrays.toString(ret)); }
二維數組:
二維數組本質上也就是一維數組, 隻不過每個元素又是一個一維數組
即:數組的數組就是一個二維數組
語法格式:
數據類型[ ][ ] 數組名稱 = new 數據類型 [行數][列數] { 初始化數據 };
1.創建二維數組及初始化:
int[][] array1 = new int[10][10]; int array2[][] = new int[10][10]; int array3[][] = { { 1, 1, 1 }, { 2, 2, 2 } }; int array4[][] = new int[][] { { 1, 1, 1 }, { 2, 2, 2 } };
2.二維數組長度:
// 獲取二維數組的第一維長度(3) int len1 = array.length; // 獲取二維數組的第一維的第一個數組長度(1) int len2 = array[0].length;
進行開發之中,出現二位數組的幾率並不高
3.二維數組的打印:
- 方法① foreach
int[][] array = { {1,2,3}, {4,5,6} }; for (int[] tmp : array) { for (int x: tmp) { System.out.print(x+" "); } System.out.println(); }
- 方法② for循環
for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]+" "); } System.out.println(); }
打印結果:
- 方法③ deeptoString
int[][] array = {{1, 2, 3}, {4, 5, 6}}; System.out.println(Arrays.deepToString(array));
打印結果:
4.不規則的二維數組:
int[ ][ ] array = new int[2][ ];
註意:C語言中是可以指定列,行可自行推導;Java中,行必須指定,列是不可以自動推導的
此時若用上述 for 循環來打印數組,便會出現異常:
分析如下:
Array類:
java.util.Arrays 類提供的所有方法都是靜態的,能方便地操作數組,
由於數組對象本身並沒有什麼方法可以供我們調用,但API中提供瞭一個工具類Arrays供我們使用,從而可以對數據對象進行一些基本的操作。
Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行調用,而”不用”使用對象來調用 (註意:是”不用”而不是”不能”)
Array具有的功能這裡就不一一列舉瞭,可以去JDK幫助文檔自行瞭解
總結
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- 聊聊Arrays.deepToString()和Arrays.toString()的區別
- Java打印數組的三種方法整理
- Java常問面試內容–數組、聲明、初始化、冒泡、多維數組、稀疏數組
- Java中數組的定義與使用
- Java數組(Array)最全匯總(中篇)