Java中的陣列
阿新 • • 發佈:2021-01-02
Java中的陣列
陣列的定義
- 相同型別資料的有序集合
- 相同型別的若干個資料,按照一定順序排列組合而成
- 每一個數據稱作元素,可以用下標來訪問
陣列的宣告與建立
int[] num1;
int num2[];
有以上兩種方式宣告
常用的是第一種方式宣告
第二種是為了迎合C/C++的風格
//計算所有元素的和 int[] nums = new int[10]; int sum = 0 ; Scanner scanner = new Scanner(System.in); for( int i = 0 ; i<nums.length ; i++) { if ( scanner.hasNextInt() ) { nums[i] = scanner.nextInt(); } } for ( int x : nums) { sum += x; } System.out.println("sum=" + sum);
下標越界
int[] nums = new int[10];
注意:下標是從0開始的,nums[10]屬於越界,會報一下錯誤
ArrayIndexOutOfBoundError
陣列下表越界錯誤
記憶體分析
Java記憶體分析
- 堆
- 存放new的物件和陣列
- 可被所有執行緒共享
- 不存放別的物件引用
- 棧
- 存放基本變數型別
- 會包含這個基本型別的具體數值
- 引用物件的變數
- 會存放這個物件的引用,也就是這個物件的地址
- 存放基本變數型別
- 方法區
- 可以被所有的執行緒共享
- 包含了所有的class和static變數
陣列的初始化
靜態初始化
int[] a = {1,2,3,4,5,6,7,8,9};
動態初始化
int[] a = new int[9];
動態分配,每個預設賦值為0
陣列的基本特點
- 長度固定,建立後無法改變
- 每個元素型別相同
- 元素可以是任意型別,即基本型別和引用型別
- 陣列變數屬於引用型別
- 陣列本身就是一個物件
- java中物件是在堆當中的
- 陣列的元素不論是基本型別還是引用型別,陣列本身是在堆當中的
陣列的使用
普通遍歷
int[] a = {1,2,3,4,5,6,7,8,9};
for (int i=0 ; i<a.length ; i++) {
System.out.println(a[i]);
}
Each for遍歷
int[] a = {1,2,3,4,5,6,7,8,9}; for (int i : a) { System.out.println(i); }
反轉陣列
public class Demo02 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,9};
reverse(a); //這裡也體現了陣列的引用傳遞
for (int i: a) {
System.out.println(i);
}
}
//將陣列的值反轉
public static void reverse(int[] array) {
for (int i=0 ,tmp = 0; i<array.length/2 ; i++) {
tmp = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = tmp;
}
}
}
注意:array[array.length-i-1],這裡非常容易越界,報ArrayIndexOutOfBoundException
多維陣列
二位陣列宣告
int[][] a = {{0,1},{2,3},{4,5},{6,7},{8,9}};
int[][] b = new int[5][2];
二維陣列初始化
int[][] a = {{0,1},{2,3},{4,5},{6,7},{8,9}};
for (int[] x: a) {
for(int y: x) {
System.out.print(y + "\t");
}
System.out.println();
}
Arrays類的使用
import java.util.Arrays;
public class Demo04 {
public static void main(String[] args) {
int[] a = {3,515,2521,111,224,845,31313,2545,45,88};
System.out.println(a); //列印雜湊碼
System.out.println(Arrays.toString(a)); //列印陣列
Arrays.fill(a,8); //填充8
System.out.println(Arrays.toString(a)); //列印陣列
}
}
列印結果
[I@34a245ab
[3, 515, 2521, 111, 224, 845, 31313, 2545, 45, 88]
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8]
排序
氣泡排序
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
int[] a = {3,515,2521,111,224,845,31313,2545,45,88};
System.out.println(Arrays.toString(a));
sequence(a);
System.out.println(Arrays.toString(a));
}
public static void sequence(int[] array) {
for( int i=0 ; i<array.length-1 ; i++) {
boolean flag = true;
for( int j=0 , tmp = 0; j<array.length-i-1 ; j++) {
if ( array[j] > array[j+1]) {
tmp = array[j] ;
array[j] = array[j+1] ;
array[j+1] = tmp;
flag = false;
}
}
if (flag) {
break;
}
}
}
}
輸出結果
[3, 515, 2521, 111, 224, 845, 31313, 2545, 45, 88]
[3, 45, 88, 111, 224, 515, 845, 2521, 2545, 31313]
只需要修改第10行中的'<'為‘>’就是逆向排序