Java陣列
阿新 • • 發佈:2020-07-01
陣列
一.陣列的宣告建立
public class HelloWord { public static void main(String[] args) { int[] nums1;//定義 int nums2[]; int sum=0; nums1=new int[8];//建立一個數組 nums1[0]=9;//給陣列元素中賦值 for (int i=0;i<nums1.length;i++){ sum+=nums1[i]; } System.out.println(sum); System.out.println(nums1[1]); } }
二.記憶體分析
java記憶體分析:
- 堆
- 存放new的物件和陣列;
- 可以被所有執行緒共享,不會存放別的物件引用
- 棧
- 存放基本變數型別(會包含這個基本型別的具體數值)
- 引用物件的變數(會存放這個引用在堆裡面的具體地址)
- 方法區
- 可以被所有的執行緒共享
- 包含了所有的class和static變數
三.陣列的三種初始化
public class HelloWord { public static void main(String[] args) { //靜態初始化:建立+賦值 int[] a={1,2,3,4,5,6,7,8}; //動態初始化:含預設初始化(一經分配空間,每個元素都被隱式初始化) int[] b=new int[8]; b[0]=10; } }
四.陣列的四個基本特點
- 其長度是確定的,一經建立,大小不能改變;
- 元素必須是相同型別,不能出現混合型別;
- 元素可以是任何資料型別,包括基本型別和引用型別;
- 陣列本身就是物件,陣列元素相當於物件的成員變數;陣列物件本身是在堆中;
五.陣列的使用
public class HelloWord { public static void main(String[] args) { int[] arrays={1,2,3,4,5,6}; //列印全部陣列元素 for (int i=0;i<arrays.length;i++) { System.out.println(arrays[i]); } //計算全部元素的和 int sum=0; for (int i=0;i<arrays.length;i++) { sum+=arrays[i]; } System.out.println(sum); //查詢最大的元素 int temp=arrays[0]; for(int i=1;i<arrays.length;i++){ if (temp<arrays[i]){ temp=arrays[i]; } } System.out.println(temp); //FOR-EACH迴圈 for (int array:arrays) { System.out.println(array); } int[] test=new int[arrays.length]; test=reverse(arrays); } //反轉陣列 public static int[] reverse(int[] arrays){ int[] result=new int[arrays.length]; for (int i=0;i<arrays.length;i++){ result[i]=arrays[arrays.length-i-1]; System.out.println(result[i]); } return result; } }
六.Arrays類
import java.util.Arrays;
public class HelloWord {
public static void main(String[] args) {
int[] a={54,3,7,8,4,345,90};
//列印陣列元素
System.out.println(Arrays.toString(a));
//排序陣列元素(升序)
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//陣列填充
Arrays.fill(a,2,4,0);
System.out.println(Arrays.toString(a));
}
}
七.氣泡排序
import java.util.Arrays;
public class HelloWord {
public static void main(String[] args) {
int[] a={54,3,7,8,4,345,90};
//臨時變數
int temp=0;
boolean flag=false;//標誌位減少比較
//外層迴圈,判斷要走多少次
for(int i=0;i<a.length-1;i++){
//內層迴圈,比較判斷兩個數
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
if (flag==false){
break;
}
}
}
System.out.println(Arrays.toString(a));
}
}
八.稀疏陣列
public class HelloWord {
public static void main(String[] args) {
//建立一個數組
int[][] a=new int[6][6];
a[2][2]=1;
a[3][1]=2;
a[5][2]=3;
//計算其非零值
int sum=0;
//輸出陣列
for (int i = 0; i <a.length; i++) {
for(int j=0;j<a[i].length;j++){
if(a[i][j]!=0){
sum++;
}
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
//建立一個稀疏陣列
int[][] b=new int[sum+1][3];
b[0][0]=a.length;
b[0][1]=a[0].length;
b[0][2]=sum;
//計算非零值存放在稀疏陣列的行數
int count=0;
for (int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
if (a[i][j]!=0){
count++;
b[count][0]=i;
b[count][1]=j;
b[count][2]=a[i][j];
}
}
}
//輸出稀疏陣列
for (int i = 0; i < b.length; i++) {
for(int j=0;j<b[i].length;j++){
System.out.print(b[i][j]+"\t");
}
System.out.println();
}
//讀取稀疏陣列
int[][] c=new int[b[0][0]][b[0][1]];
for(int i=1;i<b.length;i++){
c[b[i][0]][b[i][1]]=b[i][2];
}
//輸出讀取的陣列
for (int i = 0; i <c.length; i++) {
for(int j=0;j<c[i].length;j++){
System.out.print(c[i][j]+"\t");
}
System.out.println();
}
}
}