命令行參數(shù)
在程序運(yùn)行過程中淹禾,可以向應(yīng)用程序傳遞一些參數(shù)歧焦,這些參數(shù)稱為命名行參數(shù)
public class Test01{
??? publicstatic void main(String[] args){
?????? System.out.println(args.length);
?????? for(inti= 0;i
?????????? System.out.println(args[i]);
?????? }
??? }
}
命令行參數(shù)以字符串的形式傳入args數(shù)組中∽⒂可以一次傳遞0-多個(gè)參數(shù)苫亦,以空格分割。
如果參數(shù)中本身包含空格枫耳,需要使用引號乏矾。
Arrays
jdk中為了便于開發(fā),給開發(fā)者提供了Arrays類迁杨,其中包含了很多數(shù)組的常用操作钻心。例如快速輸出、排序铅协、查找等捷沸。
常用方法
import java.util.Arrays;
public class Test02{
??? publicstatic void main(String[] args){
?????? int[]arr = {4,2,3,1};
?????? //【1】數(shù)組的字符串形式
?????? Stringstr = Arrays.toString(arr);
?????? System.out.println(str);
?????? //【2】sort對數(shù)組排序(只能升序)-> 內(nèi)部使用快速排序。
?????? Arrays.sort(arr);
?????? System.out.println(Arrays.toString(arr));
??? ??? //【3】fill 填充數(shù)組
?????? //Arrays.fill(arr,0);
?????? //System.out.println(Arrays.toString(arr));
?????? //【4】equals(arr1,arr2) 判斷兩個(gè)數(shù)組是否相等狐史。
?????? //數(shù)組相等的條件:a.長度相等 b.對應(yīng)位置元素相等痒给。
?????? int[]arr2 = {1,2,3};
?????? System.out.println(Arrays.equals(arr,arr2));
??? }
}
二分法查找
private static int binarySearch0(long[] a,int fromIndex, int toIndex,long key){
???????int low = fromIndex;
???????int high = toIndex - 1;
???????while (low <= high) {
???????????int mid = (low + high) >>> 1;
? ??????????long midVal = a[mid];
???????????if (midVal < key)
??????????????? low = mid + 1;
???????????else if (midVal > key)
??????????????? high = mid - 1;
???????????else
??????????????? return mid; // key found
???????}
???????return -(low + 1);?// key notfound.
??? }
二分法查找必須是有序的數(shù)組说墨,如果找到返回索引;
如果沒有找到苍柏,返回-插入點(diǎn)-1尼斧。插入點(diǎn)是key應(yīng)該放到數(shù)組的位置。
數(shù)組的復(fù)制
copyOf(arr,len) 把a(bǔ)rr復(fù)制len個(gè)長度的元素并返回新數(shù)組试吁。如果len>arr.length,新數(shù)組的長度末尾用0填充棺棵。
copyOfRange(arr,from,to) 從arr中from(包含)位置開始復(fù)制到to(不包含)這個(gè)范圍的元素到新數(shù)組中。含頭不含尾熄捍。
import java.util.Arrays;
public class Test04{
??? publicstatic void main(String[] args){
?????? int[]arr = {1,3,4,6,8};
?????? int[]newArr = Arrays.copyOf(arr,6);
?????? System.out.println(Arrays.toString(newArr));
?????? //copyOfRange(arr,from,to)
?????? int[]newArr2 = Arrays.copyOfRange(arr,1,3);
?????? System.out.println(Arrays.toString(newArr2));
??? }
}
其中System也提供了賦值數(shù)組的方法烛恤。
arraycopy(srcArr,srcPos,destArr,destPos,len)
srcArr:要復(fù)制的源數(shù)組
srcPos:從srcArr的srcPos位置開始復(fù)制
destArr:復(fù)制到的目標(biāo)數(shù)組
destPos:目標(biāo)數(shù)組從destPos開始存放
len:從源數(shù)組中復(fù)制len個(gè)長度
int[] arr2 = new int[arr.length];
System.arraycopy(arr,1,arr2,0,3);
System.out.println(Arrays.toString(arr2));
二維數(shù)組
? ? ?二維數(shù)組基礎(chǔ)
二維數(shù)組是數(shù)組的數(shù)組,數(shù)組的元素也是數(shù)組治唤。如圖:
二維數(shù)組表示行列二維結(jié)構(gòu)棒动。
二維數(shù)組的聲明
根據(jù)二維數(shù)組的定義
import java.util.Arrays;
public class Test05{
??? publicstatic void main(String[] args){
? ? ? ?//二維數(shù)組
?????? //int[]
?????? //(int[]) []
?????? //【1】聲明
?????? int[][]arr;
?????? //【2】初始化一個(gè)能存3個(gè)一維數(shù)組的二維數(shù)組
?????? arr= new int[3][];
?????? //【3】賦值
?????? int[]arr1 = {1,3,4,5};
?????? int[]arr2 = {1,3,4};
?????? int[]arr3 = {2,1,6,4};
?????? arr[0]= arr1;
?????? arr[1]= arr2;
?????? arr[2]= arr3;
?????? System.out.println(arr);
?????? System.out.println(Arrays.toString(arr));
??? }
}
此時(shí)arr = new int[3][];只分配了二維數(shù)組的空間,一維數(shù)組沒有分配空間宾添。
聲明一個(gè)規(guī)則的二維數(shù)組
import java.util.Arrays;
public class Test06{
??? public? static void main(String[] args){
?????? //聲明一個(gè)規(guī)則的二維數(shù)組船惨,3行4列
?????? int[][]? arr;
?????? arr? = new int[3][4];
?????? arr[0][0]? = 10;
?????? arr[0][1]? = 20;
?????? arr[0][2]? = 30;
?????? arr[0][3]? = 40;
?????? arr[1][0]? = 100;
?????? arr[1][1]? = 200;
?????? arr[1][2]? = 300;
?????? arr[1][3]? = 400;
?????? arr[2][0]? = 1000;
?????? arr[2][1]? = 2000;
?????? arr[2][2]? = 3000;
?????? arr[2][3]? = 4000;
?????? System.out.println(Arrays.toString(arr));
??? }
}
此時(shí),二維數(shù)組已經(jīng)分配好空間缕陕,同時(shí)一維也分配好空間粱锐。
當(dāng)已知二維數(shù)組的值數(shù),可以考慮字面量聲明扛邑。
import java.util.Arrays;
public class Test07{
??? public? static void main(String[] args){
?????? //聲明字面量二維數(shù)組
?????? int[][]? arr = {
?????????? {10,20,30,40},
?????????? {100,200,300},
?????????? {1000,2000,3000,4000}
?????? };
?????? System.out.println(Arrays.toString(arr));
??? }
}
二維數(shù)組的遍歷
import java.util.Arrays;
public class Test08{
??? public? static void main(String[] args){
?????? //聲明字面量二維數(shù)組
?????? int[][]? arr = {
?????????? {10,20,30,40},
?????????? {100,200,300},
?????????? {1000,2000,3000,4000}
?????? };
?????? //? System.out.println(Arrays.toString(arr));
?????? /*
?????? for(int? i=0;i
?????????? int[]? t = arr[i];
?????????? for(int? j=0;j
????????????? System.out.print(t[j]+"\t");
?????????? }
?????????? System.out.println();
?????? }
?????? */
?????? for(int? i=0;i
?????????? for(int? j=0;j
????????????? System.out.print(arr[i][j]+"\t");
?????????? }
?????????? System.out.println();
?????? }
??? }
}
總結(jié):
二維數(shù)組是行列結(jié)構(gòu)怜浅,使用雙層for循環(huán),外層for用于控制行蔬崩,內(nèi)層for用于控制列
行列結(jié)構(gòu)=> 雙層for遍歷恶座。
基本數(shù)據(jù)類型和引用數(shù)據(jù)類型賦值的區(qū)別
import java.util.Arrays;
public class Test09{
??? public? static void main(String[] args){
?????? //基本數(shù)據(jù)類型的賦值
?????? int? a = 10;
?????? int? b;
?????? b? = a;
?????? //? a? b?
?????? b? = 20;
?????? //? a? b?
?????? //引用數(shù)據(jù)類型的賦值
?????? int[]? arr = {1,3,5};
?????? int[]? arr2 = arr;
?????? arr2[0]? = 100;
?????? System.out.println("arr:"+arr);
?????? System.out.println("arr2:"+arr2);
?????? System.out.println("arr[0]:"+arr[0]);
??? }
}
總結(jié):
基本數(shù)據(jù)類型賦值時(shí),復(fù)制的是值
引用數(shù)據(jù)類型賦值時(shí)沥阳,復(fù)制的是引用跨琳。