美文网首页
Java基础 - 方法和数组

Java基础 - 方法和数组

作者: ADMAS | 来源:发表于2019-04-15 17:14 被阅读0次

13.方法和数组

方法

  • 方法定义

    程序中完成某个独立的功能,可重复使用的一段代码的集合,解决功能重复的问题;

  • 方法结构

      [修饰符] 返回值类型 方法名([数据类型 变量名1,数据类型 变量名2,...]) {
    
              方法体;
    
              [return 值;]
      }
    

    参数列表:又称为参数清单,包含参数的个数、参数类型、参数顺序。

    方法签名:方法名+方法参数列表,判断是否是同一个方法的标准。

  • 方法特点

    • 它可以实现独立的功能,必须定义在类里面。

    • 它只有被调用才会执行,它可以被重复使用。

    • 方法结束后方法里的对象失去引用, 变量会消失。

  • 方法的重载

    在同一个类中,允许多个方法的名字相同,但是他们的参数列表绝对不能相同

    遵守的原则:两同一不同

    • 两同:同一个类,方法名相同

    • 一不同:方法的形参列表(参数的个数,参数的类型,参数顺序)

    注意:方法重载和方法的返回值类型无关。

  • 方法的递归

    所谓递归就是方法自己调用自己,可以执行结束(有出口),

  • 方法参数的值传递机制

    方法被调用时,方法里的参数是以值传递的方式传递的。

    所谓值传递,就是将实际参数的副本(复制品)传入方法,而参数本身不受影响

    • 若是基本数据类型,就直接传递实参值的副本

    • 若是引用数据类型,就传递实际参数的16进制地址值

    示例代码:

    基本类型

      需求:定义一个方法change,改变传入实参的值。   
      public static void main(String[] args) {
          int x=10;
          change(x);
          System.out.println("main中执行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方法,改变数组索引为1的元素的值。
    
      public static void main(String[] args) {
          int[] arr = {1,2 };
          change(arr);
          System.out.println("main中执行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}
      }
    

数组

  • 数组定义

    把具有相同类型的若干变量按有序的形式组织起来, 这些按一定顺序排列的同类型数据的集合称为数组

    数组也是一种数据类型.

  • 数组初始化

    Java中数组必先初始化后才能使用,所谓初始化就是给数组元素分配内存,并为每个元素赋初始值。

    初始化数组的两种方式:

    1. 静态初始化

       元素类型[] 数组名 = new 元素类型[]{值1,值2,...}
       int[] arr = new int[]{1,2,3}    
       
       简写语法:
      
       元素类型[] 数组名 = {元素1,元素2,元素3...元素n}
       int[] arr = {1,2,3}
      
    2. 动态初始化

       元素类型[] 数组名 = new 元素类型[长度]
       int[] arr = new int[10];
      
  • 二维数组

    1. 一维数组中每一个元素都是一个值

    2. 二维数组:就是里面的每一个元素都是一个一维数组(内存地址值)

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

    3. 三维数组,就是里面是每一个元素都的二维数组(内存地址值)

  • 可变参数

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

    可变参数也是编译器的特性(语法糖),底层依然是数组,和数组的打包

    一个方法中可变参数只能有1个,且必须位于最后

    二维数组的可变参数是int[]... arr

  • 排序算法

    1. 冒泡排序(Bubble Sort)

      这是最简单的排序法,

      • 基本思路:

        对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。

        可以看出若有N个元素,那么一共要进行N-1轮比较,第M轮要进行N-M次比较。(若6个元素,要进行6-1轮比较,第一轮比较6-1次,第三轮比较6-3次)。

      • 示例代码:

          int[] arr = {3, 5, 4, 1, 8, 2};
          //外层循环表示要比较多少轮
          for (int i = 1; i < arr.length; i++) {
              //内循环表示每轮比较多少次
              for (int j = 0; j < arr.length - i; j++) {
                  //每次比较时,相邻的两个数,前面大于后面的元素,则交换值,得到该次比较的最大值
                  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. 选择排序

      • 基本思路

        选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可。

        可以看出选择排序,第一轮会选出最小值,第二轮会选出第二小的值,直到最后。

        第一轮从arr[0]和后面元素相比较,第二轮从arr[1]和后面的元素相比较,依次类推。N个数要进行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. 二分查找

      当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的

      • 基本思路

        每一次都跟数组的中间变量作比较,根据大于或者小于来改动开始和结束的索引

        只要中间值和key相同就返回索引

        如果循环结束都没有返回那就说明key在数组中不存在,返回-1

  • 数组工具类 Arrays

    常用方法

      int binarySearch(type[] arr,type key)   使用二分法查找数组里某元素并返回其索引,若找不到返回负数.
    
      void sort(type[] arr)   使用调优后的快速法对指定数组排序。
    
      String toString(type[] arr) 返回指定数组内容的字符串表示形式。
    
      public static type[] copyOf(type[] original, int newLength) 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
    

相关文章

  • 算法(第四版)读书笔记 第一章

    y7## Java基础 数组 创建数组 声明数组的类型和名字 创建数组 初始化数组 二维数组 静态方法 调用 方法...

  • 数组基础

    数组基础 新建数组 数组方法和属性 数组常用方法 数组的遍历方法

  • 数组基础

    数组基础 新建数组 数组方法和属性 数组合并 数组常用方法

  • java基础之数组和方法

    数组 定义数组 动态初始化 先声明数组,再分配内存给该数组 例如: ‘’‘ intarray...

  • Java基础之方法、数组

    此为个人学习笔记,如有错误,欢迎指教 八、函数 概述: 格式: 说明: 理解:参数类型与参数名,有点像声明1个变量...

  • java基础、数组、函数(方法)

    java基础 一、概述 1.1 java版本 Java SE(标准版)Java EE(企业版)Java ME(微缩...

  • Java基础 - 方法和数组

    13.方法和数组 方法 方法定义程序中完成某个独立的功能,可重复使用的一段代码的集合,解决功能重复的问题; 方法结...

  • Java基础方法4(数组)

    6.数组操作 文集推荐: Java基础方法集1Python基础知识完整版Spring Boot学习笔记Linux指...

  • 对数器

    数组排序对数器 1.java有自己的数组复制方法和比较方法,要先导入java.util.Arrays包; 2.生成...

  • Java基础笔记05

    05.01_Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) B:数组概念 C:数组定义格式...

网友评论

      本文标题:Java基础 - 方法和数组

      本文链接:https://www.haomeiwen.com/subject/rxxniqtx.html