Java基礎 - 方法和數(shù)組

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ù)組的兩種方式:

    1. 靜態(tài)初始化

       元素類型[] 數(shù)組名 = new 元素類型[]{值1,值2,...}
       int[] arr = new int[]{1,2,3}    
       
       簡寫語法:
      
       元素類型[] 數(shù)組名 = {元素1,元素2,元素3...元素n}
       int[] arr = {1,2,3}
      
    2. 動態(tài)初始化

       元素類型[] 數(shù)組名 = new 元素類型[長度]
       int[] arr = new int[10];
      
  • 二維數(shù)組

    1. 一維數(shù)組中每一個元素都是一個值

    2. 二維數(shù)組:就是里面的每一個元素都是一個一維數(shù)組(內(nèi)存地址值)

      int[][] arr = {{1,2,3},{5,6,7},{8}}

    3. 三維數(shù)組,就是里面是每一個元素都的二維數(shù)組(內(nèi)存地址值)

  • 可變參數(shù)

      public void test(int a,int...ss)
    

    可變參數(shù)也是編譯器的特性(語法糖),底層依然是數(shù)組,和數(shù)組的打包

    一個方法中可變參數(shù)只能有1個,且必須位于最后

    二維數(shù)組的可變參數(shù)是int[]... arr

  • 排序算法

    1. 冒泡排序(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];
                  }
              }
          }
        
    2. 選擇排序

      • 基本思路

        選擇某個索引位置的元素,然后和后面元素依次比較,若大于則交換位置,經(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];
                  }
              }
          }
        
    3. 二分查找

      當數(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 填充(如有必要),以使副本具有指定的長度。
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容