Java 陣列的學習筆記
阿新 • • 發佈:2020-08-24
陣列概述
陣列就是相同型別資料的有序的組合,
陣列表述的是相同型別的若干個資料,按照一定的先後次序排列組個而成
陣列宣告建立
首先必須要宣告陣列變數,才能再程式中使用陣列。下面是宣告陣列變數的語法:
public class ArrayDemo01 {
//變數的型別 變數的名字=變數的值
//陣列型別
public static void main(String[] args) {
int[]nums;//定義
int nums2[];
}
}
Java語言使用new操作符來建立陣列,語法如下:
nums=new int[10];
陣列的元素是通過索引訪問的,陣列索引從0 開始。
獲取陣列長度:
package com.ronghui.array;
public class ArrayDemo01 {
//變數的型別 變數的名字=變數的值
//陣列型別
public static void main(String[] args) {
int[] nums;//宣告一個數組
nums=new int[10];//建立一個數組
//給陣列元素賦值
nums[0]=1;
nums[1]=2;
nums[2]=3;
nums[3]=4;
nums[4]=5;
nums[5]=6;
nums[6]=7;
nums[7]=8;
nums[8]=9;
nums[9]=10;
//計算所有元素的和
//獲取陣列的長度 arrays.length
int sum=0;
for(int i=0;i<nums.length;i++){
sum=sum+ nums[i];
}
System.out.println("總和為:"+sum);
}
}
記憶體分析
package com.ronghui.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//靜態初始化:建立+賦值
int []a={1,2,3,4,5,6,7,8};
System.out.println(a[0]);
//動態初始化:包含預設初始化
int[]b=new int[10];
b[0]=10;
System.out.println(b[0]);
}
}
陣列的四個基本特點
-
其長度是確定的,陣列一旦被建立,它的大小就是不可以改變的。
-
其元素必須是相同型別,不允許出現混合型別。
-
陣列中的元素可以是任何資料型別,包括基本型別和引用型別
-
陣列變數屬引用型別,陣列也可以看成數物件,陣列中的每個元素相當於該物件的成員變數。陣列本身就是物件,Java中物件是在堆中的,因此陣列無論儲存原始型別還是其他物件型別,陣列物件本身是在堆中的。
陣列使用
陣列使用有三種
-
普通的for迴圈
package com.ronghui.array;
public class ArrayDemo03 {
public static void main(String[] args) {
int[]array={1,2,3,4,5};
//列印全部陣列元素
for (int i=0;i< array.length;i++){
System.out.println(array[i]);
}
System.out.println("==================");
//計算所有元素的和
int sum=0;
for (int i=0;i< array.length;i++){
sum=sum+array[i];
}
System.out.println("sum="+sum);
System.out.println("==================");
//查詢最大元素
int max=array[0];
for (int i=1;i< array.length;i++){
if (max<array[i]){
max=array[i];
}
}
System.out.println(max);
}
}
-
for each迴圈
package com.ronghui.array;
public class ArrayDemo04 {
public static void main(String[] args) {
int[]arrays ={1,2,3,4,5};
// for (int array : arrays) {//增強型的for迴圈,沒有下標
// System.out.println(array);
// }
// printArray(arrays);
int[] reverse = reverse(arrays);
printArray(reverse);
}
//列印陣列元素
public static void printArray(int[] arrays){
for (int i=0;i< arrays.length;i++){
System.out.print(arrays[i]+" ");
}
}
//反轉陣列
public static int[] reverse(int[] arrays){
int[] result =new int[arrays.length];
//反轉
for (int i=0,j=result.length-1;i<arrays.length;i++,j--){
result[j]=arrays[i];
}
return result;
}
} -
陣列做方法入參
-
陣列做返回值
多維陣列
package com.ronghui.array;
public class ArrayDemo05 {
public static void main(String[] args) {
//[5][2]
/**
* 1,2 array[0]
* 2,3 array[1]
* 3,4 array[2]
* 4,5 array[3]
* 5,6 array[4]
*/
int[][] array={{1,2},{2,3},{3,4},{4,5},{5,6},};
printArray(array[1]);
System.out.println("===============");
System.out.println(array[0][0]);
System.out.println(array[0][1]);
}
public static void printArray(int[] arrays){
for (int i=0;i< arrays.length;i++){
System.out.print(arrays[i]+" ");
}
}
}
Arrays 類
package com.ronghui.array;
import java.util.Arrays;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] a={1,2,3,4,54,875,54,556,5568,5557,44787};
System.out.println(a);
//d列印陣列元素 Arrays.toString
//System.out.println(Arrays.toString(a));
//printArray(a);
Arrays.sort(a);//陣列排序
System.out.println(Arrays.toString(a));
}
public static void printArray(int[] a){
for (int i = 0; i <a.length ; i++) {
if(i==0){
System.out.print("[");
}
if (i==a.length-1){
System.out.print(a[i]+"]");
}else {
System.out.print(a[i] + ", ");
}
}
}
}
氣泡排序
-
氣泡排序無疑是最為出名的排序演算法之一,總共有八大排序
-
氣泡排序分為兩層迴圈,外層冒泡輪數,裡層依次比較
package com.ronghui.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args) { int[] a={1,5,6,2,45,56,32,45,78,98,412,4545,222,52,5,6}; int[] sort = sort(a);//呼叫完我們自己寫的排序方法後,返回一個排序後的陣列 System.out.println(Arrays.toString(sort)); } //氣泡排序 //1.比較陣列中兩個相鄰的元素,如果第一個比第二個數大,我們就交換他們的位置 //2.每次比較都會產生一個最大或者最小的數字 //3.下一輪則可以少一次排序 //4.依次迴圈直到結束 public static int[] sort(int[] array){ int temp=0; //外層迴圈,判斷我們這個要走多少次 for (int i = 0; i <array.length-1 ; i++) { //記憶體迴圈,比較兩個數,如果第一個數比第二個數大,則交換位置 for (int j = 0; j <array.length-1-i ; j++) { if (array[j+1]<array[j]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } return array; } }
稀疏陣列
package com.ronghui.array; public class ArrayDemo08 { public static void main(String[] args) { //建立一個二維陣列 11*11 0:沒有棋子 1:黑棋 2 白棋 int [][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //輸出原始的陣列 System.out.println("輸出原始的陣列"); for (int[] ints:array1){ for(int anInt:ints){ System.out.print(anInt+"\t"); } System.out.println(); } //轉換為稀疏陣列 //獲取有效值的個數 int sum =0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array1[i][j]!=0){ sum++; } } } System.out.println("有效值的個數:"+sum); //2.建立一個稀疏陣列 int [][]array2=new int[sum+1][3]; array2[0][0]=11 ; array2[0][1]=11 ; array2[0][2]=sum; //遍歷二維陣列,將非0的值,存到稀疏陣列中 int count=0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if (array1[i][j]!=0){ count++; array2[count][0]=i; array2[count][1]=j; array2[count][2]=array1[i][j]; } } } //輸出稀疏陣列 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("================"); System.out.println("還原"); //讀取稀疏陣列 int[][]array3 =new int[array2[0][0]][array2[0][1]]; //給其中的元素還原值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]]=array2[i][2]; } //列印 System.out.println("輸出還原的陣列"); for (int[] ints:array3){ for(int anInt:ints){ System.out.print(anInt+"\t"); } System.out.println(); } } }