一維數(shù)組
聲明并創(chuàng)建數(shù)組變量
elementType[] arrayRefVar = new elementType[arraySize];
elementType arrayRefVar[]= new elementType[arraySize];(元素類型 數(shù)組引用變量[])
推薦使用第一種方法,元素類型可以是任意數(shù)據(jù)類型,但是數(shù)組中所有元素的數(shù)據(jù)類型必須一樣。
簡寫: elementType[] arrayRefVar = {value0,value1,...,valuek};
使用初始化數(shù)組簡寫方式,必須將聲明、創(chuàng)建和初始化數(shù)組都放在一條語句中。將它們分開會產(chǎn)生語法錯誤。
聲明一個數(shù)組變量時并不給數(shù)組分配內(nèi)存空間,只是創(chuàng)建一個數(shù)組引用的存儲位置,如果變量不包含對數(shù)組的引用,那么變量的值為null。 除非數(shù)組已經(jīng)被創(chuàng)建,否則不能給它分配任何元素。
數(shù)組大小和默認值
數(shù)組一旦被創(chuàng)建它的大小就是固定的,不能被修改,只能通過arrayRefVar[index]引用變量(地址)和元素下標訪問數(shù)組元素。 越界訪問是經(jīng)常出現(xiàn)的程序錯誤,會拋出一個運行時錯誤arrayIndexOfBoundsException,因此下標的范圍不能超出0~arrayRefVar.length-1。
當創(chuàng)建數(shù)組后,它的元素被賦予默認值。數(shù)值型基本數(shù)據(jù)類型的默認值是0,char型的默認值為'\u0000',Boolean型的默認值是false。
for each 循環(huán)
for (double e : myList){ System.out.println(e); }
注意:變量e必須聲明為與myList中元素相同的數(shù)據(jù)類型。
復(fù)制數(shù)組
在Java中,可以使用賦值語句復(fù)制基本數(shù)據(jù)類型的變量,但不能復(fù)制數(shù)組。
將一個數(shù)組變量賦值給另一個數(shù)組變量,list1 = list2 ;實際上是將一個數(shù)組的引用復(fù)制給另一個變量,使兩個變量都指向相同的內(nèi)存地址。
復(fù)制數(shù)組的方法
- 使用循環(huán)語句逐個地復(fù)制數(shù)組中的元素
- 使用System類中的靜態(tài)方法arraycopy
arraycopy(sourceArray,srcPos,targetArray,tarPos,length);
參數(shù)srcPos和tarPos分別表示在源數(shù)組sourceArray和目標數(shù)組targetArray中的起始位置。復(fù)制的元素個數(shù)由length指定。復(fù)制完成后,源數(shù)組和目標數(shù)組具有相同的內(nèi)容,但內(nèi)存空間獨立。 - 使用clone方法復(fù)制數(shù)組
將數(shù)組傳遞給方法
當一個數(shù)組傳遞給方法時,數(shù)組的引用被傳遞給方法。即方法中的數(shù)組和傳遞的數(shù)組是一樣的,如果改變方法中的數(shù)組,方法外的數(shù)組也會改變。
例:
public class test{
public static void main(String[] args){
int[] list = {1,2,3,4,5};
reverse(list);
for(int i = 0;i<list.length;i++)
System.out.print(list[i]+"");
}
public static void reverse(int[] list){
int[] newList = new int[list.length];
for(int i = 0;i<list.length;i++){
newList[i] = list[list.length-1-i];
}
list = newList;
}
}
輸出為12345 方法中的引用變量改變不影響方法外,但是方法中的數(shù)組元素改變,方法外同樣改變。
二分查找法
二分查找法的前提條件是列表必須以升序排序。如果關(guān)鍵字在列表中,則返回其匹配元素的下標;否則返回一個負整數(shù)k,滿足-k-1為插入該關(guān)鍵字的位置。