java數組基礎
java中的數組是引用數據類型。
//在棧空間聲明數組引用對象
int[] NAME;
int NAME[]; //中括號放哪邊都是等價的
className[] NAME;
//在堆空間劃分數組空間並初始化數組對象
NAME = new int[3];
NAME = new className[3]
//賦值,在堆空間中填充每個數組成員
NAME[0]=0;NAME[1]=1;...
className[0]=...
//聲明數組時直接賦值
int[] NAME = {1,2,3};
className[] NAME = {new className(1),new className(2 ),...};
根據數據類型可分為兩種類型:
- (1).基礎數據類型的數組。只是數組內的數據類型是基礎的,數組本身仍然是引用類型,畢竟數組有兩段內存空間(棧中引用變量,堆中數組對象)。
例如:int[] a = new int[3];
表示數組中有三個成員:a[0]、a[1]和a[2]。 - (2).引用數據類型的數組。例如有一個date類,則可以
date[] d = new date[3];
,表示數組中有3個成員date[0]、date[1]和date[2],但每個date[*]成員自身又是一個引用對象,繼續引用實際的date對象。具體的見下文。
註意,在劃分數組空間時的array[N]中,N表示的是N個對應數據類型的成員{1,2,3}、{5,6,7}
。如果是引用數據類型的數組,則N就是N個引用對象。
以下分別是基礎數據類型的數組、引用類型的數組的聲明、劃分空間初始化和賦值填充的代碼示例。
class Date {
int year,month,day;
Date(int y,int m,int d) {
year = y;month = m;day = d;
}
}
public class Test {
public static void main(String[] args) {
//
int a1[];
a1 = new int[3];
a1[0]=3;a1[1]=9;a1[2]=10;
//
int[] a2 = new int[3];
a2[0]=3;a2[1]=9;a2[2]=10;
//
int[] a3 = {3,9,10}
//
Date[] days1;
days1 = new Date[3];
days1[0] = new Date(2012,3,5);
days1[1] = new Date(2013,4,5);
days1[2] = new Date(2014,5,5);
//
Date[] days2 = new Date[3];
...
//
Date[] day3 = (new Date(2012,3,5),new Date(2013,4,5),new Date(2014,5,5));
}
}
二維數組
java中的多維數組可以看作是數組的數組。例如二維數組int a[][]
。聲明時必須先聲明左邊的,再聲明右邊的,因為數組的數組代表沒有左邊的就沒有右邊的。
int a[][] = {{1,2},{3,4,5,6},{7,8,9}};
int[][] a = {{1,2},{3,4,5,6},{7,8,9}};
int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
a[0][0] = 1;a[0][1] = 2;
int t1[][] = new int[][4]; //錯誤
遍歷數組
遍歷一維數組arr[]
:
for (int i = 0 ;i<arr.length;i++) {}
for (int i:arr) {}
遍歷二維數組arr[][]
:
for (int i=0;i<arr.length;i++) {
for (int j=0;j<arr[i].length;j++) {}
}
for (int i[]:arr) {
for (int j:i) {}
}
註意,使用foreach遍歷方式時,type s:array
的type和array的type必須能夠兼容,此處的s就代表各個數組成員的值。
例如:
String s[] = {"Microsoft","IBM","Apple","Oracle","AliBaBa"}
for (String x:s) { // type = String
System.out.println(x); // s = "Microsoft","IBM","Apple","Oracle","AliBaBa"
}
對於不想遍歷而是只想輸出數組的全部元素值,可以采用java.util.Arrays類的toString()方法。
Integer[] nums = {1,2,3,4};
System.out.println(Arrays.toString(nums)); // return: [1, 2, 3, 4]
拷貝數組
java.lang.System類中的arraycopy()方法,因為數組在內存中是連續的,所以可以直接拷貝內存實現數組成員的拷貝。
System.arraycopy(src,src_start_pos,dest,dest_start_pos,length)
表示將src數組從src_start_pos位置開始復制,總共復制length個成員到dest數組中的第dest_start_pos處。註意可能會數組下標越界。
String s[] = {"Microsoft","IBM","Apple","Oracle","AliBaBa"}
String sbak[] = new String[6];
System.arraycopy(s,0,sbak,0,s.length)
但System.arraycopy()只支持同數據類型的數組進行copy,例如無法將int[] copy 到String[]中。此時只能使用遍歷copy的方式一個元素一個元素地copy。
import java.util.Arrays;
int[] nums = {1,2,3,4};
String[] snums = new String[nums.length];
for (int i=0;i<nums.length;i++) {
snums[i] = Integer.valueOf(nums[i]).toString();
}
System.out.println(Arrays.toString(snums));
main(String[] args)
public static void main(String[] args) {}
的main()方法中,參數為數組類型,數組名為args。參數的內容是java命令行傳遞的各個值。
既然args是數組名,所以也可以使用其他字符替換args。因為是數組,所以數組的一些特性就可以使用,例如arg[0]、arg[1]、args.length等。
例如:
public class TestArray {
public static void main(String [] args) {
System.out.println(args[0] + "-" + args[1] + "-" + args[2]);
}
}
執行時,傳遞參數1、2、3.
java Test 1 2 3
執行結果:
1-2-3
註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!
java數組基礎