13.方法和數(shù)組
方法
-
方法定義
程序中完成某個(gè)獨(dú)立的功能,可重復(fù)使用的一段代碼的集合,解決功能重復(fù)的問(wèn)題;
-
方法結(jié)構(gòu)
[修飾符] 返回值類型 方法名([數(shù)據(jù)類型 變量名1逗爹,數(shù)據(jù)類型 變量名2,...]) { 方法體; [return 值;] }
參數(shù)列表:又稱為參數(shù)清單,包含參數(shù)的個(gè)數(shù)胎挎、參數(shù)類型、參數(shù)順序忆家。
方法簽名:方法名+方法參數(shù)列表犹菇,判斷是否是同一個(gè)方法的標(biāo)準(zhǔn)。
-
方法特點(diǎn)
它可以實(shí)現(xiàn)獨(dú)立的功能芽卿,必須定義在類里面揭芍。
它只有被調(diào)用才會(huì)執(zhí)行,它可以被重復(fù)使用卸例。
方法結(jié)束后方法里的對(duì)象失去引用, 變量會(huì)消失称杨。
-
方法的重載
在同一個(gè)類中,允許多個(gè)方法的名字相同筷转,但是他們的參數(shù)列表絕對(duì)不能相同
遵守的原則:兩同一不同
兩同:同一個(gè)類列另,方法名相同
一不同:方法的形參列表(參數(shù)的個(gè)數(shù),參數(shù)的類型,參數(shù)順序)
注意:方法重載和方法的返回值類型無(wú)關(guān)。
-
方法的遞歸
所謂遞歸就是方法自己調(diào)用自己,可以執(zhí)行結(jié)束(有出口),
-
方法參數(shù)的值傳遞機(jī)制
方法被調(diào)用時(shí)旦装,方法里的參數(shù)是以值傳遞的方式傳遞的页衙。
所謂值傳遞,就是將實(shí)際參數(shù)的副本(復(fù)制品)傳入方法阴绢,而參數(shù)本身不受影響店乐。
若是基本數(shù)據(jù)類型,就直接傳遞實(shí)參值的副本呻袭。
若是引用數(shù)據(jù)類型眨八,就傳遞實(shí)際參數(shù)的16進(jìn)制地址值。
示例代碼:
基本類型
需求:定義一個(gè)方法change左电,改變傳入實(shí)參的值廉侧。 public static void main(String[] args) { int x=10; change(x); System.out.println("main中執(zhí)行change后的x=" + x); //輸出 x = 10 } public static void change(int x) { System.out.println("change前...x=" + x); // x = 10 x=20; System.out.println("change后...x=" + x); // x = 20 }
引用類型
案例:定義一個(gè)change方法页响,改變數(shù)組索引為1的元素的值。 public static void main(String[] args) { int[] arr = {1段誊,2 }; change(arr); System.out.println("main中執(zhí)行change后arr[1]= " + arr[1] );// {1,10} } public static void change(int[] arr) { System.out.println("chagne前...arr[1]= " + arr[1] ); // {1,2} arr[1] = 10; System.out.println("chagne后...arr[1]= " + arr[1] ); // {1,10} }
數(shù)組
-
數(shù)組定義
把具有相同類型的若干變量按有序的形式組織起來(lái), 這些按一定順序排列的同類型數(shù)據(jù)的集合稱為數(shù)組
數(shù)組也是一種數(shù)據(jù)類型.
-
數(shù)組初始化
Java中數(shù)組必先初始化后才能使用闰蚕,所謂初始化就是給數(shù)組元素分配內(nèi)存,并為每個(gè)元素賦初始值连舍。
初始化數(shù)組的兩種方式:
-
靜態(tài)初始化
元素類型[] 數(shù)組名 = new 元素類型[]{值1没陡,值2,...} int[] arr = new int[]{1,2,3} 簡(jiǎn)寫(xiě)語(yǔ)法: 元素類型[] 數(shù)組名 = {元素1,元素2,元素3...元素n} int[] arr = {1,2,3}
-
動(dòng)態(tài)初始化
元素類型[] 數(shù)組名 = new 元素類型[長(zhǎng)度] int[] arr = new int[10];
-
-
二維數(shù)組
一維數(shù)組中每一個(gè)元素都是一個(gè)值
-
二維數(shù)組:就是里面的每一個(gè)元素都是一個(gè)一維數(shù)組(內(nèi)存地址值)
int[][] arr = {{1,2,3},{5,6,7},{8}}
三維數(shù)組索赏,就是里面是每一個(gè)元素都的二維數(shù)組(內(nèi)存地址值)
-
可變參數(shù)
public void test(int a,int...ss)
可變參數(shù)也是編譯器的特性(語(yǔ)法糖)盼玄,底層依然是數(shù)組,和數(shù)組的打包
一個(gè)方法中可變參數(shù)只能有1個(gè)潜腻,且必須位于最后
二維數(shù)組的可變參數(shù)是int[]... arr
-
排序算法
-
冒泡排序(Bubble Sort)
這是最簡(jiǎn)單的排序法埃儿,
-
基本思路:
對(duì)未排序的各元素從頭到尾依次比較相鄰的兩個(gè)元素大小關(guān)系,若大于則交換位置融涣,經(jīng)過(guò)第一輪比較排序后可得出最大值蝌箍,然后使用同樣的方法把剩下的元素逐個(gè)比較即可。
可以看出若有N個(gè)元素暴心,那么一共要進(jìn)行N-1輪比較妓盲,第M輪要進(jìn)行N-M次比較。(若6個(gè)元素专普,要進(jìn)行6-1輪比較悯衬,第一輪比較6-1次,第三輪比較6-3次)檀夹。
-
示例代碼:
int[] arr = {3, 5, 4, 1, 8, 2}; //外層循環(huán)表示要比較多少輪 for (int i = 1; i < arr.length; i++) { //內(nèi)循環(huán)表示每輪比較多少次 for (int j = 0; j < arr.length - i; j++) { //每次比較時(shí),相鄰的兩個(gè)數(shù),前面大于后面的元素,則交換值,得到該次比較的最大值 if (arr[j] > arr[j + 1]) { //異或的位運(yùn)算,交換值 arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } }
-
-
選擇排序
-
基本思路
選擇某個(gè)索引位置的元素筋粗,然后和后面元素依次比較,若大于則交換位置炸渡,經(jīng)過(guò)第一輪比較排序后可得出最小值娜亿,然后使用同樣的方法把剩下的元素逐個(gè)比較即可。
可以看出選擇排序蚌堵,第一輪會(huì)選出最小值买决,第二輪會(huì)選出第二小的值,直到最后吼畏。
第一輪從arr[0]和后面元素相比較督赤,第二輪從arr[1]和后面的元素相比較,依次類推泻蚊。N個(gè)數(shù)要進(jìn)行N-1輪躲舌。相對(duì)于冒泡排序效率高一些。
-
示例代碼
int[] arr = {3, 5, 4, 1, 8, 2}; for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { //異或的位運(yùn)算,交換值 arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } } }
-
-
二分查找
當(dāng)數(shù)據(jù)量很大適宜采用該方法性雄。采用二分法查找時(shí)没卸,數(shù)據(jù)需是排好序的
-
基本思路
每一次都跟數(shù)組的中間變量作比較,根據(jù)大于或者小于來(lái)改動(dòng)開(kāi)始和結(jié)束的索引
只要中間值和key相同就返回索引
如果循環(huán)結(jié)束都沒(méi)有返回那就說(shuō)明key在數(shù)組中不存在,返回-1
-
-
-
數(shù)組工具類 Arrays
常用方法
int binarySearch(type[] arr,type key) 使用二分法查找數(shù)組里某元素并返回其索引羹奉,若找不到返回負(fù)數(shù). void sort(type[] arr) 使用調(diào)優(yōu)后的快速法對(duì)指定數(shù)組排序。 String toString(type[] arr) 返回指定數(shù)組內(nèi)容的字符串表示形式约计。 public static type[] copyOf(type[] original, int newLength) 復(fù)制指定的數(shù)組诀拭,截取或用 0 填充(如有必要),以使副本具有指定的長(zhǎng)度病蛉。