小談一下java數組
數組是存放數據的容器,有兩個特點:元素類型唯一,長度固定。
一維數組聲明:類型[] 數組名;類型 數組名[];推薦用前一種。
多維數組聲明同樣是以上要求。
在數組創建時,要注意一下幾點:
1).數組對象一旦創建,其大小不能更改,所以創建數組是要給予適當的長度,對這一點還是有解決餘地的,畢竟代碼是自己的;
2).數組的下表是從0開始的,下表的範圍從0 到數組的長度-1;
3).數組中的元素是通過數組名和數組下標來確定的。
數組的初始化分爲靜態初始化(不能指定長度)和動態初始化(必須指定長度)兩種:
如一維數組初始化:int[] a = new int[3]; int[] a = new int[]{1,2,3}注意後一種的[]中不可以填值;
多維數組的初始化:int[][] a = new int [3][3]; int[][] a = new int[3][];int[][] a = new int[][]{{1},{1,2},{1,2,3}};注意後兩種格式[]中不可再填值。
從另一個角度說數組的初始化分爲:
1).默認初始化:不論數組是什麼類型的數組,從創建開始,系統便會默認爲其每個元素賦初值。對於基本類型的默認值,這一點以前說過,現在再細說一下吧,對於boolean類型的爲false,其他類型的都相應的0。具體的是byte,short,int默認爲0;long默認爲0L;double默認爲0.0;float默認爲0.0F;char默認爲’\u0000’;String的默認值爲null。
2).賦值初始化:當要爲數組元素賦值,但又具有明顯的規律時,則可以利用循環語句對其初始化。在對數組進行循環式,限制條件一般都與其length屬性相關,這樣一定不會越界;在對數組進行賦值時最好不要使用具體數值,因爲在具體的數值既容易出錯,可維護性又差,一旦數組長度改變,那麼就要修改多行代碼,所以還是建議用數組名.length吧。
3).枚舉初始化:如果數組元素需要的初始值與默認值不同,但又沒有明顯的規律且數量又不多,這是就可採用枚舉初始化,如上面的int[] a = new int[]{1,8,4,3}。
數組賦值的規則如下:*數組的維數要相同,*數組元素的類型要相同,*對於數組而言不存在數據類型轉換。
Java有其輸入的方式:下面說一下基本的輸入方法
Scanner爲輸入掃描類,基本用法如下代碼所示:
package practice; import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //可輸入多種數據類型 int i = scan.nextInt(); String s = scan.next(); boolean b = scan.nextBoolean(); double d = scan.nextDouble(); System.out.println("int:"+i+" Sring:"+s+" boolean"+b+" double:"+d); } }
輸出如下:
1 maidou true 1.1 int:1 Sring:maidou booleantrue double:1.1
下面說一下測試數組常用的方法吧:
Arrays.copyOfRange(參數,參數,參數):將指定數組的指定範圍複製到一個新的數組
Arrays.copyOf(參數,參數):複製指定的數組,截取或用0填充,使副本具有指定的長度
Arrays.sort(參數):對指定int型數組的指定範圍按數字升序進行排序
Arrays.binarySearch(參數,參數):二分法查找指定的int型數組,以獲得指定的值,但其必須在排完序的基礎上,也就是在sort調用完再用二分法來查找
Arrays.toString():方法提供了數組的格式化輸出方式,一般在調用時需要重寫此方法
System.arraycopy(src,srcPos,dest,destPos.length):src-原數組 srcPos-原數組的起始位置dest-目標數組 destPos-目標數組的起始位置 length-要拷貝的數組元素個數
Arrays工具類的使用與後來集合中的Collections相似,這一點在集合中再說吧!
下面看一下代碼吧:
package practice; import java.util.Arrays; public class TestArrays { public static void main(String[] args) { int[] a = new int[]{1,3,5,7,9,2,4,6,8,10}; int[] b = Arrays.copyOf(a, a.length); int[] c = Arrays.copyOfRange(a, 2, 5);//前閉後開 System.out.println("Arrays.copyOf()方法 "+Arrays.toString(b)); System.out.println("copyOf方法常見了一個新的地址 "+(a == b));//copyOf()方法創建了一個新的內存空間 System.out.println("Arrays.copyOfRange方法 "+Arrays.toString(c)); Arrays.sort(a); for(int i : a){ System.out.print(i+" ");//排序後的數組依次輸出每個元素 } System.out.println(); System.out.println("Arrays.toString()方法 "+Arrays.toString(a)); int pos = Arrays.binarySearch(a, 5); System.out.println("Arrays.binarySearch方法 "+pos); int[] d = new int[6]; System.arraycopy(a, 0, d, 1, 5); System.out.println("System.arraycopy方法 "+Arrays.toString(d)); } }
輸出如下所示:
Arrays.copyOf()方法 [1, 3, 5, 7, 9, 2, 4, 6, 8, 10] copyOf方法常見了一個新的地址 false Arrays.copyOfRange方法 [5, 7, 9] 1 2 3 4 5 6 7 8 9 10 Arrays.toString()方法 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Arrays.binarySearch方法 4 System.arraycopy方法 [0, 1, 2, 3, 4, 5]
好啦,數組就先到這裏吧,接下來會講一下面向對象的三大特^-^!