陣列,陣列類,SyStem類
陣列:
什麼是陣列
- 陣列是具有相同的資料型別且按照一定的次序排列的一組變數的集合體。
- 用一個變數來表示一組資料。
- java中陣列在記憶體中分配一段連續的空間,這段空間中儲存資料的個數是固定的
陣列的特點
- 陣列是序排列的
- 陣列屬於引用資料型別的變數。陣列的元素,既可以是基本資料型別,也可以是引用資料型別
- 建立陣列物件會在記憶體中開闢一整塊連續的空間
- 陣列的長度一旦確定,就不能修改。
使用陣列的步驟
- 定義陣列
- 為陣列分配記憶體
- 陣列元素初始化
- 使用
一維陣列的宣告與初始化
-
int num;//宣告
num = 10;//初始化
int id = 1001;//宣告 + 初始化
-
int[] ids;//宣告
//1.1 靜態初始化:陣列的初始化和陣列元素的賦值操作同時進行
ids = new int[]{1001,1002,1003,1004};
//1.2動態初始化:陣列的初始化和陣列元素的賦值操作分開進行
String[] names = new String[5];
int[] arr4 = {1,2,3,4,5};//型別推斷
分配記憶體
-
通過 new 來為陣列分配記憶體空間
陣列名 = new 資料型別[陣列長度]; eg: nums = new int[10];
資料型別[] 陣列名 = new 資料型別[陣列長度]; eg: int[] nums = new int[10];
-
注意:陣列的長度一旦指定,就不能改變了
陣列的屬性
- array.length
- 說明:陣列一旦初始化,其長度就是確定的。arr.length陣列長度一旦確定,就不可修改。
遍歷輸出陣列元素
//for迴圈遍歷陣列
for(int i = 0; i < nums.length; i ++){
System.out.println(nums[i]);
}
//for-each用法
for(int i : nums){
System.out.prinln(i);
}
for-each
/*
* for-each 陣列可以使用for-each迴圈
*
* for(變數 : 被迴圈的變數){
* // 程式碼塊
* }
*
* 每一次迴圈都會將 被迴圈的變數 的對應值賦值給 變數
*/
for(int num : nums) { // 可以理解為 for 迴圈中加入 int num = nums[i];
System.out.println(num);
}
陣列常見問題
-
陣列下標越界
java.lang.ArrayIndexOutOfBoundsException 原因是下標使用不正確,下標應是從0~陣列長度-
-
空指標異常
java.lang.NullPointerException 我們操作了一個為 null 的變數
-
語法錯誤
//因為宣告陣列時,是沒有陣列長度的。沒有這種寫法 int array1[3] = new int[]{1,2,3}; //在陣列宣告時要有陣列標識[],下面這種宣告是宣告一個int型別的變數。 //在初始化時,陣列的長度是根據初始化的情況來定的,不需要指定長度 int array2 = new int[3]{1,2,3}; //直接初始化陣列,必須與宣告寫在一起 int array3[]; array3 = {1,2,3};
氣泡排序
/**
* 升序氣泡排序
* @param nums */
public static void bubbleSort(int[] nums) {
//控制排序次數
for (int i = 0; i < nums.length - 1; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
//如果前邊的數大於後邊的數,交換位置
if(nums[j] > nums[j + 1]) {
//定義臨時變數儲存值
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
二維陣列
如何理解二維陣列?
- 陣列屬於引用資料型別
- 陣列的元素也可以是引用資料型別
- 一個一維陣列A的元素如果還是一個一維陣列型別的,則,此陣列A稱為二維陣列
二維陣列的宣告與初始化
//靜態初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//動態初始化1
String[][] arr2 = new String[3][2];
//動態初始化2
String[][] arr3 = new String[3][];
//也是正確的寫法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//型別推斷
二維陣列的遍歷
//將二維陣列遍歷成一維陣列
for (int i = 0; i < nums1.length; i++) {
//遍歷輸出一維陣列
for (int j = 0; j < nums1[i].length; j++) {
System.out.print(nums1[i][j] + ",");
}
//換行
System.out.println();
}
工具類 java.util.Arrays:static方法可以直接使用類名.方法名()呼叫
Arrays.equals(a, a2)
- 判斷引用是否一致
- 判斷是否為 null,對於 null 返回 false
- 判斷陣列長度是否一致
- 判斷陣列中每個元素是否一樣
System.out.println(Arrays.equals(nums, nums1)); // true
Arrays.toString(nums)
String result = "[";
for (int i = 0; i < nums1.length; i++) {
if(i == nums1.length - 1) {
result = result + nums1[i] + "]";
}else {
result = result + nums1[i] + ", ";
}
}
//
System.out.println(result);
//String str = Arrays.toString(nums);
println
/*
* println(o)方法會執行 String.valueOf(o),
* String.valueOf(o)方法中會執行 o.toString()
* 型別名稱 + @ + hash值
*/
- 直接使用System.out.println(arr),得到的是 (型別名稱 + @ + hash值)一種地址值。
Arrays.sort(nums);
-
排序
Arrays.sort(nums); System.out.println("排序後: " + Arrays.toString(nums));
二分搜尋
-
二分搜尋,必須先排序
int index = Arrays.binarySearch(nums, 90); System.out.println("90 在陣列中的下標是:" + index);
Arrays.fill(nums, 6)
-
將陣列 nums 中的每個元素都填充為 6
Arrays.fill(nums, 6);; System.out.println(Arrays.toString(nums));
複製陣列
int[] newArr = Arrays.copyOf(nums, nums.length);
System.out.println(newArr == nums); // false
System.out.println(Arrays.equals(nums, newArr)); // true
int[] newArr1 = Arrays.copyOf(nums, 4);
System.out.println(Arrays.toString(newArr1));
// 複製陣列的長度大於源陣列的長度的話,大於源陣列長度部分用陣列資料型別的預設值填充
int[] newArr2 = Arrays.copyOf(nums, 14);
System.out.println(Arrays.toString(newArr2));
System
-
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :將指定源陣列中的陣列從指定位置複製到目標陣列的指定位置
src 源陣列
srcPos 源陣列中的起始位置
dest 目標陣列
destPos 目的地資料中的起始位置
length 要複製的陣列元素的數量
int[] src = {1, 2, 3, 4, 5}; int[] dest = new int[3]; System.arraycopy(src, 0, dest, 0, Math.min(src.length, dest.length));// System.out.println(Arrays.toString(dest)); // 將陣列中下標為 3 的元素刪除掉 {1, 2, 3, 5} int[] nums = {1, 2, 3, 4, 5}; int[] result = new int[nums.length - 1]; // 先複製原陣列 result.length 位 result = Arrays.copyOf(nums, result.length); // 1, 2, 3, 4 for (int i = 3; i < nums.length - 1; i++) { result[i] = nums[i + 1]; } // for (int i = 0; i < nums.length - 1; i++) { // if (i >= 4) { // // 跳過刪除元素 // result[i] = nums[i + 1]; // }else { // // 被刪除元素之前 複製 // result[i] = nums[i]; // } // } System.out.println(Arrays.toString(result));
相關文章
- 類陣列陣列
- 陣列助手類(ArrayHelper)陣列
- 關於在類陣列中使用陣列方法陣列
- 陣列類别範本陣列
- Java陣列宣告建立和使用以及多維陣列、Arrays類、稀疏陣列Java陣列
- JavaScript 深入之類陣列物件與 argumentsJavaScript陣列物件
- JS-陣列、函式、類與物件JS陣列函式物件
- Map轉實體類或List陣列陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- 五分鐘快速瞭解ArrayLike(類陣列)陣列
- 從JavaScript中的類陣列物件說起JavaScript陣列物件
- Java中陣列及相關類的使用Java陣列
- 前端如何優雅處理類陣列物件?前端陣列物件
- 實體類定義陣列物件,和物件陣列物件
- php陣列的分類有哪幾個PHP陣列
- 泛型程式設計(模板函式,模板類的套用) Myvector 具體案例 實現可存放int 陣列 char陣列 類物件陣列 以及一組指標泛型程式設計函式陣列物件指標
- Java陣列03:陣列使用Java陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- 指標陣列和陣列指標與二維陣列指標陣列
- 陣列指標,指標陣列陣列指標
- Javascript - 陣列和陣列的方法JavaScript陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- [求解]陣列,分成倆個陣列,陣列值之和的相差最小。陣列
- 查詢陣列中相似欄位(陣列裡面某個值相似歸類到一起)陣列
- 陣列陣列
- 深入學習js之——類陣列物件與arguments #11JS陣列物件
- iOS 字典轉陣列,陣列轉字典iOS陣列
- PHP陣列轉換為js陣列PHP陣列JS
- 【陣列】977. 有序陣列的平方陣列
- 指標陣列與陣列指標指標陣列
- 2-7 陣列:動態陣列陣列
- 陣列演算法-差分陣列陣列演算法
- scala陣列與java陣列對比陣列Java
- 矩陣和陣列矩陣陣列
- 陣列的三種宣告方式總結、多維陣列的遍歷、Arrays類的常用方法總結陣列
- 稀疏陣列、佇列陣列佇列
- js 一維陣列轉二維陣列JS陣列