Java SE学习总结 Day (7)

Day 07开篇:

      
        "
今天是java基础主要学习了常见的算法,分别是二分查找法(折半查找法),冒泡排序,选择排序(直接排序算法),快速排序;同时学了方法的定义,格式,方法的组成的解释,注意事项和方法重载等。 "




知识点反馈:

今天的知识点总结思维导图
 
 
 
 
 
一.常见算法
1. 二分查找法(折半查找法):
(1)定义:所谓的二分查找其实也就是2/1查找,取出所有中间的一个元素作为基点,基点分为左(小数据),右(大数据),将需要查找的值和基点比较。如果查找的值大于基点,则往大数据方向去查找,因为小数据不可能存在这个元素(因为我们查找的元素存在排序的)。
(2)举例:
public class Text1 {
    public static void main(String[] args) {
       int [] arr = {1,3,4,21,45,46,123,453,457,534,673,1253,2346,3134};
       //请输入随意的一个数据,然后呢 找出这个数据所在的索引编号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数据:");
        int key = sc.nextInt();
int min,mid,max;
            min = 0;
            max = arr.length-1;
            mid = (min + max) / 2;
            boolean flag = false;
 
            while(key != arr[mid]){//如果大于基点,则往大方向去寻找
                   if(key > arr[mid]){
                    min = mid + 1;
                }else if(key < arr[mid]){//如果小于基点,则往小方向去寻找
                    max = mid - 1;
                }
                mid = (min + max) / 2;
                if(min > max){
                    flag = true;
                    break;
                }
            }
 
        System.out.println("需要查找的元素位置在:"+mid);
            if(flag){
                System.out.println("您需要查找的元素不存在");
            }
    }
}
 
2. 冒泡排序:
(1)定义:所谓的冒泡排序就是将元素n和元素n+1进行比较,如果n+1小于n,这两者则交换位置。
(2)举例:
public class Text2{
    public static void main(String[] args) {
       int [] arr = {2,14,12,4,12,33};
        System.out.println("排序:"+Arrays.toString(arr));
           for (int i = 0; i < arr.length-1; i++) {//这个-1主要的作用没有必要和最后一位进行比较的,因为没有必要
            for (int j = 0; j < arr.length-i-1 ; j++) {//-i的主要的作用就是为了每次比较次数的递减,-1的主要作用是防止数组越界
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            
        }
        System.out.println("排序后:"+Arrays.toString(arr));
    }
}
 
3. 选择排序(直接排序算法):
(1)定义:所谓的选择排序,就是拿一个基点依次和后面的所有数比较,每比较一次,基数则往后挪动一位
(2)举例:
public class Text3 {
    public static void main(String[] args) {
       int [] arr = {2,14,12,4,12,33,12,3,123,1,2,41,23,1412,123,123,4123};
        System.out.println("排序前:"+Arrays.toString(arr));
        for (int i = 0; i < arr.length-1; i++) {//i:0
            for (int j = i+1; j < arr.length ; j++) {//为啥是 i+1呢?为了保证i的值永远他后面的所有数比较
                if(arr > arr[j]){
                    int temp = arr;
                    arr = arr[j];
                    arr[j] = temp;
                }
 
            }
        }
 
        System.out.println("排序后:"+Arrays.toString(arr));
 
    }
}
 
4. java.util.Arrays类:
(1)boolean equals(int[] a,int[] b):判断两个数组的内存是否相同
(2)String toString(int[] a):将一个数组转换为字符串的形式
(3)void sort(int[] a):对数组进行快速排序。
(4)int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。(返回的位置而不是索引)
 
二.方法
1. 定义:方法就是完成某些功能的一些代码块
2. 格式:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
                //方法代码
               return 返回值;
}
3. 方法的组成的解释:
(1)修饰符:决定了你这个方法能够被访问的权限有多大,目前来说你们不需要写死public static
(2)返回值类型:决定了你这个方法所返回的数据的类型值
(3)方法名:其实就是一个名字而已,其命名规则和变量名一致
(4)参数:<1>实际参数:其实就是实际在内存当中参与运算的数据(参数)
                <2>形式参数:定义在方法上面,主要的作用是用于来接收实际参数
(5) 参数类型:其实就是这个方法需要接收的数据的数据类型
(6)方法体语句:其实就是这个方法需要执行的代码
(7) return:结束方法
(8)返回值:这个方法所返回的数据,这个数据的数据类型必须和返回值类型匹对,由return携带返回给调用者
 
4. 返回值类型返回数据的数据类型
 
5. 参数列表就是传递几个参数,这几个参数的数据类型又是什么
 
6. 如何调用:
(1)单独调用:一般来说是没有意义的,因为只是唤醒了方法的执行,我们并没有去输出或者接受返回的值
(2)输出调用:可以在一定程度上去将返回的结果输出,但是不是特别好,因为这个结果我们不能继续使用了
(3)输出调用:可以在一定程度上去将返回的结果输出,但是不是特别好,因为这个结果我们不能继续使用了
 
7.方法的注意事项:
(1)方法不调用不执行,即使是main方法也需要依靠JVM的主线程进行调用
(2)方法的多个形参必须用逗号分割
(3)方法和方法之间是平级关系,不能存在任何形式的嵌套
(4)在没有权限限制的情况下,方法之间可以相互调用
(5)形式的参数的命名和实际参数的命名不存在任何关系(一般来说,自己开发的情况下最好保持一致)
(6)如果你的方法有明确的返回值类型,一定写上你的return,并且保证能够执行
(7)形式参数的定义,不代表一定要使用
(8)方法里面,出来类和方法,可以写任何代码
(9)形式参数的传递,只需要给兼容类型的数据即可,不要写上任何的语句
8.其他注意事项:
(1)如果说,一个方法没有明确的返回值这种情况可以使用void
(2)如果你的方法的返回值是一个void,那么就只能使用单独调用,也就是这个方法仅仅只有运行能力,不具备返回的能力。
9.JDK的新特性值可变参数:
(1)可变参数的格式:数据类型 ... 变量名
(2)其实所谓的可变参数,就是数组的语法糖
(3)所谓的语法糖,就是在原来复杂的语法上进行了改进,目的就是让语法更加的清爽明朗。但是,虽然语法不一致,可实现的原理基本一致。
(4)要求可变参数一定是在形参最后一个位置,由此可见,形式参数只能出现一个可变参数。
(5)增强循环(foreach循环):
            for(变量:你需要遍历数组(集合)){
 
            }
<1>.会先读取你需要遍历的数据(数组、集合)
<2>.每循环一次,就将本次循环所取到的值赋值给变量
<3>.至于变量你怎么操作是你的问题
 
10. 方法重载:
(1)我们在实际开发当中,很容易遇到实现的功能不一样,但是命名基本一致的问题。
(2)这么问题怎么解决呢?
     Java为了保证我们命名的合法性,所以通过方法重载,在同一个类当中,方法名相同,参数列表不同,与返回值无关
(3)参数列表不同:a.参数个数不同
                 b.参数类型不同
注意:方法的重载,跟形参的命名无关,不要去尝试另辟蹊跷
(4)既然方法重载的名字一样,那么调用的时候该怎么去选择?
<1>完全根据参数的个数和参数的类型来自动调用(顺序必须完全一致)
<2>在1.6的版本以后,只要参数个数一致,且能够名字数据类型的可以实现自动推断
<3>推断的前提是数据的转换是不需要人工干预的。
 
11. java当中形式参数会改变内存的问题?
(1)基本数据类型:形参的改变不会影响到实参,因为两者的内存空间没有任何的直接联系
(2)引用数据类型:形式的改变会直接影响实参,因为实参和形参都指向的同一个堆内存(回想数组)



 
发布了29 篇原创文章 · 获赞 7 · 访问量 3175

猜你喜欢

转载自blog.csdn.net/weixin_45406656/article/details/104190461