java中陣列常用方法總結
Java和C陣列的一些異同:
相同點:陣列名都是首元素的地址
不同點:C語言宣告變數可以直接定義陣列長度,java不可以
java只有在為陣列分配變數時,可以宣告陣列長度
java:int [] a;
a = new int [3];
C: int a [3] ;
java中,陣列名.length表示陣列長度,不用宣告,直接呼叫
陣列是引用型變數,語句 a = b;
代表將 b 的引用賦給 a,系統將會將分配給 a 的元素釋放
因此改變陣列b 的值,陣列 a 的值也會隨之改變
因此陣列的複製不能用上述方法,下面將陣列複製的方法
Java的System類庫中封裝好了一系列運算元組的方法
1. arraycopy
方法原型: public static void arraycopy(sourceArray,int index1,copyArray,index2,int length)
即從sourceArray的index1位置開始,後面length個元素,放到copyArray陣列從index2的位置
注意這裡的index1,2都是陣列的索引,即陣列的下標
如果copyArray陣列長度小於length,程式會崩潰
例項:建立main方法,自行測試
void test_arraycopy()
{
int []a = {1,2,3,4,5};
int []b = {6,7,8,9,10};
System.arraycopy(a, 2, b, 3, 2);
System.out.println("\n通過複製以後的到的陣列為:");
for(int i:b)
{
System.out.printf("%d ",i);
}
System.out.println();
}
執行結果:
通過複製以後的到的陣列為:
6 7 8 3 4
2. copyOf和copyOFRange方法:
copyOf方法原型:public static float[] copyOf(float []original,int newLength)
從陣列的第一個元素開始複製,複製長度為length,若長度超過陣列原長,則超出元素為預設值0
該方法返回一個數組
void test_copyOf()
{
int []a = {11,22,33,44,55};
int []b = Arrays.copyOf(a, 7);
System.out.println("測試copyOf函式,複製後得到的b陣列為");
for(int i:b)
{
System.out.printf("%d ",i);
}
System.out.println("\n通過toString方法輸出陣列\n"+Arrays.toString(b));
}
執行結果:
測試copyOf函式,複製後得到的b陣列為
11 22 33 44 55 0 0
原陣列長度為 5 ,length為7,故複製後的陣列最後兩位為預設值 0
copyOfRange方法原型:public static double[] copyOfRange(double []original,int from,int to)
從original下標為from的位置開始複製,到to-1的位置結束,返回一個長度為to-from的陣列
void test_arrayOfRange()
{
int []a = {55,33,44,22,11};
int []b = Arrays.copyOfRange(a, 1, 4);
System.out.println("測試copyOfRange方法:");
System.out.println(Arrays.toString(b));
}
執行結果:
測試copyOfRange方法:
[33, 44, 22]
3. 改進遍歷陣列的方法:
Arrays.toString(陣列名)
for(迴圈體,陣列名)
{
System.out.println(i);
}
或者用 Arrays.toString(陣列名)方法
void print_array()
{
int []a = {1,2,3,4,5};
System.out.println("採用改進方法遍歷陣列a,輸出結果:");
for(int i:a)
{
System.out.printf("%d ",i);
}
System.out.println("呼叫toString方法輸出陣列b");
System.out.println(Arrays.toString(b));
}
執行結果:
採用改進方法遍歷陣列a,輸出結果:1 2 3 4 5
呼叫toString方法輸出陣列b
[1, 2, 3, 4, 5]
4. 陣列的排序:sort方法
該方法有兩個函式原型:
public static void sort(doule a[])
public static void sort(doule a[],int start,int end);
第一種,將陣列按升序全排序
第二種從索引為start到索引為end-1的位置,升序排序
void test_arrayOfRange()
{
int []a = {55,33,44,22,11};
int []b = Arrays.copyOfRange(a, 1, 4);
Arrays.sort(a, 1, 4);
Arrays.sort(b);
System.out.println("排序後b陣列為:");
for(int i:b)
{
System.out.printf("%d ",i);
}
System.out.println("\n排序後a陣列為:");
for(int i:a)
{
System.out.printf("%d ",i);
}
System.out.println();
}
執行結果:
排序後b陣列為:
22 33 44
排序後a陣列為:
55 22 33 44 11
5. 在陣列中查詢一個數的方法:binarySearch
方法原型:public static int binarySearch(double [] a,double number)
返回要尋找的數number的索引,若沒查詢到,則返回一個負數
void test_binarySearch()
{
int a[] = {1,2,3};
int x;
x= Arrays.binarySearch(a, 2);
System.out.println("陣列a為:");
System.out.println(Arrays.toString(a));
System.out.println("數字x在陣列中的索引(下標)為:"+x);
}
執行結果:
陣列a為:
[1, 2, 3]
數字x在陣列中的索引(下標)為:1