陣列介紹:
- 可以存放同一型別的資料,包括基本資料型別和參考型別
- 陣列也是一種資料型別,參考型別
陣列的宣告和創建:
- 動態初始化創建 --> 資料型別[] 陣列名 = new 資料型別[大小]
- 靜態初始創建 --> 資料型別[] 陣列名 = {引數1,引數2,.........}
- length獲取陣列長度 --> 陣列名.length
- [0],[1]通過下標賦值和獲取 --> 賦值:陣列名[0] = 1,獲取:print(陣列名[i])
-
//靜態初始化陣列
int[] max = {1,2,3,4}; //靜態初始化陣列 System.out.println(max.length); System.out.println(max[0]+" "+max[1]); //max = {9,8,6}; 陣列一旦創建,大小是不可以被改變的
//動態初始化陣列 int[] scores = new int[10];//1.動態初始化一個大小為10的陣列 scores[0] = 1; //2.通過下標給陣列賦值 scores[1] = 2; scores[2] = 3; scores[3] = 4; int sum = 0; for (int i = 0; i < scores.length; i++) { System.out.println(scores[i]);//3.陣列中沒有賦值的數默認為0 sum+= scores[i];//求陣列中的和 } System.out.println(sum); //通過宣告陣列陣列 int[] nums;//宣告一個陣列 nums = new int[10]//設定陣列大小
陣列賦值機制:

陣列的小細節:
- 陣列一旦創建,大小是不能被改變的
- 陣列中的元素必須相同,不能出現混合型別
- 陣列的元素可以是任意資料型別,包括基本資料型別和參考型別
- 創建陣列沒有賦值,默認值是0
- 陣列下標必須是指定內的,不然下標越界例外 ArrayIndexOutOfBoundsException
for-Each回圈:
- 大多用來輸出陣列中的元素,因為無法操作下標
int[] nums = {4,-1,9, 10,23}; //for-Each回圈,nums表示陣列,num表示陣列里的每一個元素 for (int num : nums) { System.out.println(num); }
反轉陣列:
- 思路:陣列長度一共為5,那么代表下標4-0換,3-1換,一共回圈2次
- 定義一共變數,暫時保存替換的數,當下標4和下標0換時,把其中一共下標的數保存到變數中,另一共下標的數替換到,被、保存下標數的位置
- 當替換完成,那么在把保存的數,替換到空下標位
int[] nums = {4,-1,9, 10,23}; int temp = 0; //暫時保存 for (int i = 0; i < nums.length/2; i++) { temp = nums[nums.length - 1 -i ];//保存4下標 nums[nums.length -1 -i] = nums[i];//把0下標給4下標 nums[i] = temp;//0下標獲取4下標 } for (int num : nums) { System.out.println(num); }
陣列拷貝:
int[] num = {4,-1,9, 10,23};//被拷貝 int[] nums = new int[num.length];//創建一共和被拷貝陣列一樣大小陣列 for (int i = 0; i < nums.length; i++) { nums[i] = num[i];//拷貝 } nums[0] = 200;//改變nums的數,不會影響到num for (int i = 0; i < nums.length; i++) { System.out.println(nums[i]); }
二維陣列:
- 理解:檔案夾中創建檔案夾 等于 二維陣列
- 檔案夾中創建檔案夾在創建檔案夾 等于 三維陣列 -- 可以一直嵌套
int[][] nums = {{1,2},{3,4},{5,6}};//創建二維陣列 System.out.println(nums.length);//長度為3,因只是算一個一個大括號 System.out.println(nums[0][0]);//獲取第一個二維陣列中,的第一個陣列元素 for (int i = 0; i < nums.length; i++) {//回圈3次 0-1-2 for (int j = 0; j < nums.length -1; j++) { //回圈2次 0-1 System.out.println(nums[i][j]);//獲取二維陣列所有元素 } }

Arrays[兒微史]工具類:
- 作用:用來操作陣列,快捷方便只需要呼叫封裝好的方法即可
- Arrays.toString(nums) --> 輸入陣列所有元素
- Arrays.sort(nums) ---> 升序排序
- Arrays.fill(nums,2,5,0) ---> 陣列填充
double[] nums = {1.1,1.2,66,6,99.9}; System.out.println(Arrays.toString(nums));//輸出陣列所有元素 Arrays.sort(nums);//給陣列排序 System.out.println(Arrays.toString(nums)); Arrays.fill(nums,0);//給陣列填充,結果就是全部是0 Arrays.fill(nums,2,4,0);//給陣列填充2-4的下標 System.out.println(Arrays.toString(nums));
- 可以通過查看源代碼,查看該工具類中有什么方法使用

冒泡排序(重點):
- 冒泡排序 - 從小到大 - 從大到小的排序
- 思路:如:大-小,拿出一個元素,和元素+1比較,那么比較了所有就會得到最大的數,下一次在比較就可以省略該數,所有每次比較-1
- 優化:陣列是順序,就不進行比較,知道if回傳是布爾型通過回傳的型別,得知是否進入到if,false代表順序,true代表進入if不是順序,flase就跳出回圈

//冒泡排序 - 從小到大 - 從大到小 //優化:通過boolean型別變數來判斷陣列是否是順序 int[] ares = {1,2,3,4,5,6,7}; int temp = 0;//暫時保存 for (int i = 0; i < ares.length - 1; i++) {//回圈4次,-1是因為長度是7,實際回圈6次,從0開始所以-1 boolean king = false; //沒有交換位置為false for (int j = 0; j < ares.length - i - 1; j++) { // if(ares[j] > ares[j+1]){ //if條件不成立回傳false System.out.println("引數是否交換"); temp = ares[j]; //暫時保存 ares[j] = ares[j+1]; ares[j+1] = temp; king = true; //交換位置了為true,if判斷回傳的值是false和true,不滿足條件肯定是false } } if(!king){ System.out.println("引數代碼");//輸出此代碼,代表沒有交換 break; } } System.out.println(Arrays.toString(ares));
稀疏陣列:
- 壓縮資訊記錄有效資訊,如圖:把;獲取有效值,并獲取坐標就好

int[][] ares = new int[11][11]; // 列[9]---行[11] ares[1][2] = 1; ares[2][3] = 2; //1.輸出陣列 for (int[] are: ares) {//11給元素 for (int a : are) {//11個元素里面的元素 System.out.print(a+"\t");//列印11個元素 } System.out.println(); } //2.轉換為稀疏陣列-就是獲取有值的個數 int num = 0; for (int i = 0; i < ares.length; i++) { for (int j = 0; j < ares.length; j++) { if(ares[i][j]!=0){ num++; } } } System.out.println("有效值:"+num); //3.創建一個存放稀疏陣列的,陣列 int[][] array2 = new int[num+1][3]; array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = num; //3.1.遍歷陣列,將非零的值放到稀疏陣列 //{{11111111...},{1111...},.....} int count = 0;//記錄應該放到稀疏陣列的第幾行 for (int i = 0; i < ares.length; i++) {//遍歷的是每一個二維陣列里面的一維陣列 // System.out.println(i);//遍歷11次 for (int j = 0; j < ares[i].length; j++) {//ares[i].length;遍歷的是一維陣列里面的元素 //獲取有效元素 if(ares[i][j]!=0){//判斷了整個二維陣列,不等于零的值 ++count;//count變數是記錄每增加一行資料,應該放到哪一列中 array2[count][0] = i; System.out.println("::::"+count); array2[count][1] = j; array2[count][2] = ares[i][j]; } } } //4.輸出稀疏陣列 System.out.println("稀疏陣列"); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i][0]+"\t"+ array2[i][1]+"\t"+ array2[i][2]+"\t"); } //還原稀疏陣列 System.out.println("=====還原稀疏陣列====="); //1.讀取稀疏陣列 int[][] array3 = new int[array2[0][0]][array2[0][1]];//大小11,11 //2.給其中元素還原它的值 for (int i = 1; i < array2.length; i++) {//遍歷稀疏陣列 array3[array2[i][0]][array2[i][1]] = array2[i][2];//給坐標,賦值操作,0是列坐標,1行坐標,2是值 } //3.列印還原陣列 for (int[] are: array3) {//11給元素 for (int a : are) {//11個元素里面的元素 System.out.print(a+"\t");//列印11個元素 } System.out.println(); }
案例應用:
//保存26之母到陣列 //char是用unicode碼,所有可以通過加1來實作字母的賦值 char[] chars = new char[26]; for (int i = 0; i < chars.length; i++) { //回圈26次 chars[i] = (char)('A'+i); //i是int型別使用要強轉 } for (int i = 0; i < chars.length; i++) { System.out.println(chars[i]); } //求出最大的數,得到下標 int[] nums = {4,-1,9, 10,23}; int max = nums[0]; //假設一個最大值 int maxIndex= 0; //獲取下標 for (int i = 0; i < nums.length; i++) { if(max < nums[i]){ max = nums[i]; maxIndex = i; } } System.out.println(max); System.out.println(maxIndex);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499605.html
標籤:Java
下一篇:java例外處理的方法分享
