13.方法和數(shù)組
方法
-
方法定義
程序中完成某個獨立的功能,可重復使用的一段代碼的集合,解決功能重復的問題;
-
方法結(jié)構(gòu)
[修飾符] 返回值類型 方法名([數(shù)據(jù)類型 變量名1,數(shù)據(jù)類型 變量名2,...]) { 方法體; [return 值;] }參數(shù)列表:又稱為參數(shù)清單,包含參數(shù)的個數(shù)、參數(shù)類型、參數(shù)順序。
方法簽名:方法名+方法參數(shù)列表,判斷是否是同一個方法的標準。
-
方法特點
它可以實現(xiàn)獨立的功能,必須定義在類里面。
它只有被調(diào)用才會執(zhí)行,它可以被重復使用。
方法結(jié)束后方法里的對象失去引用, 變量會消失。
-
方法的重載
在同一個類中,允許多個方法的名字相同,但是他們的參數(shù)列表絕對不能相同
遵守的原則:兩同一不同
兩同:同一個類,方法名相同
一不同:方法的形參列表(參數(shù)的個數(shù),參數(shù)的類型,參數(shù)順序)
注意:方法重載和方法的返回值類型無關。
-
方法的遞歸
所謂遞歸就是方法自己調(diào)用自己,可以執(zhí)行結(jié)束(有出口),
-
方法參數(shù)的值傳遞機制
方法被調(diào)用時,方法里的參數(shù)是以值傳遞的方式傳遞的。
所謂值傳遞,就是將實際參數(shù)的副本(復制品)傳入方法,而參數(shù)本身不受影響。
若是基本數(shù)據(jù)類型,就直接傳遞實參值的副本。
若是引用數(shù)據(jù)類型,就傳遞實際參數(shù)的16進制地址值。
示例代碼:
基本類型
需求:定義一個方法change,改變傳入實參的值。 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 }引用類型
案例:定義一個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ù)組定義
把具有相同類型的若干變量按有序的形式組織起來, 這些按一定順序排列的同類型數(shù)據(jù)的集合稱為數(shù)組
數(shù)組也是一種數(shù)據(jù)類型.
-
數(shù)組初始化
Java中數(shù)組必先初始化后才能使用,所謂初始化就是給數(shù)組元素分配內(nèi)存,并為每個元素賦初始值。
初始化數(shù)組的兩種方式:
-
靜態(tài)初始化
元素類型[] 數(shù)組名 = new 元素類型[]{值1,值2,...} int[] arr = new int[]{1,2,3} 簡寫語法: 元素類型[] 數(shù)組名 = {元素1,元素2,元素3...元素n} int[] arr = {1,2,3} -
動態(tài)初始化
元素類型[] 數(shù)組名 = new 元素類型[長度] int[] arr = new int[10];
-
-
二維數(shù)組
一維數(shù)組中每一個元素都是一個值
-
二維數(shù)組:就是里面的每一個元素都是一個一維數(shù)組(內(nèi)存地址值)
int[][] arr = {{1,2,3},{5,6,7},{8}}
三維數(shù)組,就是里面是每一個元素都的二維數(shù)組(內(nèi)存地址值)
-
可變參數(shù)
public void test(int a,int...ss)可變參數(shù)也是編譯器的特性(語法糖),底層依然是數(shù)組,和數(shù)組的打包
一個方法中可變參數(shù)只能有1個,且必須位于最后
二維數(shù)組的可變參數(shù)是int[]... arr
-
排序算法
-
冒泡排序(Bubble Sort)
這是最簡單的排序法,
-
基本思路:
對未排序的各元素從頭到尾依次比較相鄰的兩個元素大小關系,若大于則交換位置,經(jīng)過第一輪比較排序后可得出最大值,然后使用同樣的方法把剩下的元素逐個比較即可。
可以看出若有N個元素,那么一共要進行N-1輪比較,第M輪要進行N-M次比較。(若6個元素,要進行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ù),前面大于后面的元素,則交換值,得到該次比較的最大值 if (arr[j] > arr[j + 1]) { //異或的位運算,交換值 arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; arr[j] = arr[j] ^ arr[j + 1]; } } }
-
-
選擇排序
-
基本思路
選擇某個索引位置的元素,然后和后面元素依次比較,若大于則交換位置,經(jīng)過第一輪比較排序后可得出最小值,然后使用同樣的方法把剩下的元素逐個比較即可。
可以看出選擇排序,第一輪會選出最小值,第二輪會選出第二小的值,直到最后。
第一輪從arr[0]和后面元素相比較,第二輪從arr[1]和后面的元素相比較,依次類推。N個數(shù)要進行N-1輪。相對于冒泡排序效率高一些。
-
示例代碼
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]) { //異或的位運算,交換值 arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } } }
-
-
二分查找
當數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時,數(shù)據(jù)需是排好序的
-
基本思路
每一次都跟數(shù)組的中間變量作比較,根據(jù)大于或者小于來改動開始和結(jié)束的索引
只要中間值和key相同就返回索引
如果循環(huán)結(jié)束都沒有返回那就說明key在數(shù)組中不存在,返回-1
-
-
-
數(shù)組工具類 Arrays
常用方法
int binarySearch(type[] arr,type key) 使用二分法查找數(shù)組里某元素并返回其索引,若找不到返回負數(shù). void sort(type[] arr) 使用調(diào)優(yōu)后的快速法對指定數(shù)組排序。 String toString(type[] arr) 返回指定數(shù)組內(nèi)容的字符串表示形式。 public static type[] copyOf(type[] original, int newLength) 復制指定的數(shù)組,截取或用 0 填充(如有必要),以使副本具有指定的長度。