5常用API 包装类 常见算法 Arrays工具类

这篇博客详细介绍了Java中的常用API,包括Math、System类的使用,以及Object类的toString和equals方法。还探讨了BigDecimal类的构造和运算,以及包装类的概念和Integer的特性。在算法部分,讲解了二分查找和冒泡排序的思路与实现,以及递归和快速排序的概念。最后提到了Arrays工具类的运用。
摘要由CSDN通过智能技术生成

JavaSE进阶-day05

一、常用API

1.API-基本使用【重要】(视频01) (6‘’)

1.什么是API

​ API (Application Programming Interface) :应用程序编程接口

​ 简单来说:就是java帮我们已经写好的一些方法,我们直接拿过来用就行了

​ API文档: 产品说明书

2.如何使用API帮助文档【应用】(演示)

  • 打开帮助文档

在这里插入图片描述

  • 找到索引选项卡中的输入框

在这里插入图片描述

  • 看类在哪个包下

在这里插入图片描述

  • 看类的描述

在这里插入图片描述

  • 看构造方法

在这里插入图片描述

  • 看成员方法

在这里插入图片描述

2.API-Math【】(视频02) (10‘’)
  1. Math概述

    Math 包含执行基本数字运算的方法

    Math类中无构造方法,但内部的方法都是静态的,可以直接使用类名.进行调用

  2. 常用方法

    方法名说明
    public static int abs(int a)返回参数的绝对值
    public static double ceil(double a)向上取整
    public static double floor(double a)向下取整
    public static int round(float a)按照四舍五入返回最接近参数的int
    public static int max(int a,int b)返回两个int值中的较大值
    public static int min(int a,int b)返回两个int值中的较小值
    public static double pow(double a,double b)返回a的b次幂的值
    public static double random()返回值为double的正值,[0.0,1.0)
3.API-System【】(视频03) (12‘’)
  1. System概述

    系统类,都是和系统相关的方法

    不能被实例化,所有的方法都是静态方法

  2. System常用方法

    方法名说明
    public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
    public static long currentTimeMillis()返回当前时间(以毫秒为单位)
    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
自由练习-8分钟
Object
4.Object-toString【】(视频04) (12‘’)
  1. Object概述

    Object类是所有类的直接或者间接父类

  2. toString

    直接打印一个对象,就是打印这个对象的toString方法的返回值

    Object类的toString方法得到的是对象的地址值

    我们一般都会对toString方法进行重写

在这里插入图片描述

  1. toString方法是做什么的

    将对象转换成字符串展示。这个方法里实现规定了换成字符串的格式

    ​ 默认转换格式: Object类的toString方法 , 包名 + 类名 + @ + 对象的地址值

    ​ toString方法重写: 重写定义转换格式

    ​ 生成toString方法快捷键: alt+Insert

打印ArrayList集合

5.Object-equals【】(视频05) (5‘’)
  1. 方法概念

    方法名说明
    equals比较对象是否相等,默认比较地址值。重写可以比较内容,自动生成
  2. Object类equals方法和String类equals方法的区别

在这里插入图片描述

  1. 重写自动生成的equals方法都干了那些事?
    在这里插入图片描述
6.Object-面试题【】(视频06) (5‘’)
  1. String的equals方法

    保证参数也是字符串,否则不会比较属性值而直接返回false
    在这里插入图片描述

  2. StringBuilder的equals方法

    StringBuilder类中是没有重写equals方法,用的就是Object类中的.

7.API-Objects【】(视频07) (9‘’)
  1. Objects概述

    对象工具类,所有的方法都是静态的

  2. 常用方法

    方法名说明
    public static String toString(对象)返回参数中对象的字符串表示形式。
    public static String toString(对象, 默认字符串)返回对象的字符串表示形式。 如果对象为null,返回默认值
    public static Boolean isNull(对象)判断对象是否为空
    public static Boolean nonNull(对象)判断对象是否不为空
自由练习-5分钟
BigDecimal
8.BigDecimal-构造【】(视频08) (3‘’)
  1. 什么是BigDecimal?

    可以用来进行精确计算

  2. 构造方法

    如果想要进行精确运算,那么请使用字符串的构造

    方法名说明
    BigDecimal(double val)参数为double
    BigDecimal(String val)参数为String
    package com.itheima.demo;
    
    import java.math.BigDecimal;
    
    public class MyBigDecimalDemo2 {
        public static void main(String[] args) {
            BigDecimal bd1 = new BigDecimal(10.0);
            BigDecimal bd2 = new BigDecimal("0.3");
    
            System.out.println(bd1);
            System.out.println(bd2);
        }
    }
    
9.BigDecimal-四则运算【】(视频09) (5‘’)
  1. 四则运算

    方法名说明
    public BigDecimal add(另一个BigDecimal对象)加法
    public BigDecimal subtract (另一个BigDecimal对象)(subtract[səbˈtrækt]减;减去)减法
    public BigDecimal multiply (另一个BigDecimal对象)(multiply[ˈmʌltɪplaɪ]乘;乘以;)乘法
    public BigDecimal divide (另一个BigDecimal对象)(divide[dɪˈvaɪd]除)除法
    package com.itheima.demo;
    
    import java.math.BigDecimal;
    
    //如果想要进行精确运算,那么请使用字符串的构造
    public class MyBigDecimalDemo3 {
        
        public static void main(String[] args) {
    //      BigDecimal bd1 = new BigDecimal(0.1);
    //      BigDecimal bd2 = new BigDecimal(0.2);
            BigDecimal bd1 = new BigDecimal("0.1");
            BigDecimal bd2 = new BigDecimal("0.2");
            
            
    //      public BigDecimal add(另一个BigDecimal对象) 	加法
            BigDecimal add = bd1.add(bd2);
            System.out.println("和为" + add);
            //System.out.println(0.1 + 0.2);
    
    
    //      public BigDecimal subtract (另一个BigDecimal对象)  减法
            BigDecimal subtract = bd1.subtract(bd2);
            System.out.println("差为" + subtract);
    
    //      public BigDecimal multiply (另一个BigDecimal对象)  乘法
            BigDecimal multiply = bd1.multiply(bd2);
            System.out.println("积为" + multiply);
            
            
    //      public BigDecimal divide (另一个BigDecimal对象)    除法
            BigDecimal divide = bd1.divide(bd2);
            System.out.println("商为"+divide);
    
        }
    }
    
10.BigDecimal-特殊方法【】(视频10) (7‘’)

四则运算中的除法,如果除不尽使用divide的三个参数方法:
参数1:表示参与运算的BigDecimal对象
参数2:表示小数点后面精确到多少位
参数3:舍入模式:
BigDecimal.ROUND_Up进一法
BigDecimal.ROUND_FLOOR 去尾法
BigDecimal.ROUND_HALF_UP 四舍五入

方法名说明
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)除法
package com.itheima.demo;

import java.math.BigDecimal;

public class MyBigDecimalDemo4 {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("0.3");
        BigDecimal bd2 = new BigDecimal("4"); //0.075

       /* BigDecimal divide = bd1.divide(bd2);
        System.out.println(divide);*/

       //参数一:表示参数运算的另一个对象
       //参数二:表示小数点后精确到多少位
       //参数三:舍入模式
                //进一法  BigDecimal.ROUND_UP
                //去尾法  BigDecimal.ROUND_FLOOR
                //四舍五入 BigDecimal.ROUND_HALF_UP
        BigDecimal divide = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);
    }
}

二、包装类

11.基本数据类型包装类【】(视频11) (4‘’)
  1. 概述

    将基本数据类型封装成对象的好处,在于可以在对象中定义更多的功能方法操作该数据

    比如:用于基本数据类型与字符串之间的转换

  2. 基本数据类型所对应的包装类

    基本类型包装类
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    charCharacter
    booleanBoolean

之前用集合存储基本类型数据…

12.Integer-获取对象【】(视频12) (3‘’)

Integer : 该对象中包装了一个基本数据类型

方法名说明
public Integer(int num)根据int值创建Integer对象 (过时)
public Integer(String s)根据String值创建Integer对象 (过时)
public static Integer valueOf(int num)返回表示指定的int值的Integer对象
public static Integer valueOf(String s)返回一个保存指定值的Integer对象
13.Integer-自动装箱自动拆箱【】(视频13) (7‘’)
  1. 自动装箱

    把基本数据类型自动转换为对应的包装类类型

  2. 自动拆箱

    把包装类类型转自动换为对应的基本数据类型

  3. 注意事项

    在使用包装类类型的时候,如果做操作,最好先判断是否为null

    Integer i = 100;  //自动装箱
    i+=200;  //i = i+200;  i+200 自动拆箱;    i = i+200;  赋值过程中 是自动装箱
    
14.Integer-类型转换【】(视频14) (5‘’)
  1. String转换成int

    Integer.parseInt(String s);

    String s1 = "100";
    int i2 = Integer.parseInt(s1);//可以将字符串类型的整数变成int类型的整数
    
  2. int转换成String

    方式一: + “”

    方式二: String.valueOf(int i);

    int i3 = 100;
    
    String s2 = i3 + "";  //方式一
    
    String s3 = String.valueOf(i3);  //方式二
    
15.Integer-练习【】(视频15) (5‘’)
  • 案例需求

    ​ 有一个字符串:“91 27 46 38 50”,把其中的每一个数存到int类型的数组中

  • 思路

    1.定义一个字符串

    2.把字符串中的数字数据存储到一个int类型的数组中

    ​ 两个难点:

    ​ 如何获取里面的每一个值

    ​ 如何把每一值变成int类型再存入数组

    3.遍历数组,输出结果

    public class MyIntegerDemo5 {
      
        public static void main(String[] args) {
            String s = "91 27 46 38 50";
            
            //获取字符串中的每一个数字.
            String[] strArr = s.split(" ");
    
            //创建一个int类型的数组.
            int [] numberArr = new int[strArr.length];
    
            //把strArr中的数据进行类型转换并存入到int数组中
            for (int i = 0; i < strArr.length; i++) {
                int number = Integer.parseInt(strArr[i]);
                numberArr[i] = number;
            }
            
            //遍历int类型的数组
            for (int i = 0; i < numberArr.length; i++) {
                System.out.println(numberArr[i]);
            }
        }
    }
    
自由练习-8分钟

三、常见算法

二分查找
16.数组的高级操作-二分查找思路分析【】(视频16) (7‘’)

1.什么是二分查找?

​ 二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率

2.二分查找的前提条件
数组内的元素一定要按照大小顺序排列(从小到大或从大到小),如果没有大小顺序,是不能使用二分查找法的

3.二分查找的实现步骤
1,定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引
2,循环查找,但是min <= max
3,计算出mid的值
4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
5,如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
6,如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
7,当 min > max 时,表示要查找的元素在数组中不存在,返回-1.

17.数组的高级操作-二分查找代码实现【】(视频17) (6‘’)
  1. 需求

    在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置(下标)

  2. 代码实现

    package com.itheima.arrsearch;
    
    public class MyBinarySearchDemo {
        public static void main(String[] args) {
            int [] arr = {1,2,3,4,5,6,7,8,9,10};
            int number = 11;
    
            //1,我现在要干嘛? --- 二分查找
            //2.我干这件事情需要什么? --- 数组 元素
            //3,我干完了,要不要把结果返回调用者 --- 把索引返回给调用者
            int index = binarySearchForIndex(arr,number);
            System.out.println(index);
        }
    
        private static int binarySearchForIndex(int[] arr, int number) {
            //1,定义查找的范围
            int min = 0;
            int max = arr.length - 1;
            //2.循环查找 min <= max
            while(min <= max){
                //3.计算出中间位置 mid
                int mid = (min + max) >> 1;
                //mid指向的元素 > number
                if(arr[mid] > number){
                    //表示要查找的元素在左边.
                    max = mid -1;
                }else if(arr[mid] < number){
                    //mid指向的元素 < number
                    //表示要查找的元素在右边.
                    min = mid + 1;
                }else{
                    //mid指向的元素 == number
                    return mid;
                }
            }
            //如果min大于了max就表示元素不存在,返回-1.
            return -1;
        }
    }
    
冒泡排序
18.数组的高级操作-冒泡排序思路分析【】(视频18) (5‘’)
  1. 什么是冒泡排序

    一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序

在这里插入图片描述

  1. 冒泡排序特点

    如果有n个数据进行排序,总共需要比较n-1轮

    每一轮儿比较完毕,下一次的比较就会少一个数据参与

  2. 冒泡排序的过程
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

19.数组的高级操作-冒泡排序代码实现【】(视频19) (8‘’)
  1. 需求

    对{3, 5, 2, 1, 4}数组进行正序排序

  2. 代码实现

    public class MyBubbleSortDemo2 {
        public static void main(String[] args) {
            int[] arr = {3, 5, 2, 1, 4};
            //1 2 3 4 5
            bubbleSort(arr);
        }
    
    
        private static void bubbleSort(int[] arr) {
            //外层循环控制的是次数 比数组的长度少一次.
            for (int i = 0; i < arr.length - 1; i++) {
                //内存循环就是实际循环比较的
                //-1 是为了让数组不要越界
                //-i 每一轮结束之后,我们就会少比一个数字.
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    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));
        }
    
    }
    
自由练习-8分钟
递归
20.递归-概念【】(视频20) (5‘’)

1.什么是递归?

递归就是方法自己调用自己(类似循环),通过每次传入的参数不同,可以解决复杂的问题

public void show(){
    System.out.println("I love Java,and you?");
    show();
}

2.递归解决问题的核心思想?

​ 递归算法可以把本身问题分解规模小的同类问题,通过求解规模小的同类问题的解

3.递归解决问题的三大步骤:

  • 第一步: 明确你这个函数想要干什么
  • 第二步: 寻找递归结束条件。找出当参数为什么时,可以知道方法的结果,直接返回结果
  • 第三步: **找出方法的等价关系式。**将大问题拆分成小问题,决定每次调用方法时参数缩小的范围

4.递归的基本使用

package com.itheima.myfactorial;

public class MyFactorialDemo2 {
    public static void main(String[] args) {
        int sum = getSum(100);
        System.out.println(sum);
    }

    private static int getSum(int i) {
        //1- 100之间的和
            //100 + (1-99之间的和)
                    // 99 + (1- 98之间的和)
                        //....
                            //1
        //方法的作用: 求 1- i 之间和
        if(i == 1){
            return 1;
        }else{
            return i + getSum(i -1);
        }
    }
   
} 
21.递归-求阶乘代码实现【】(视频21) (3‘’)

1、需求

​ 用递归求5的阶乘,并把结果在控制台输出

2.代码实现

public class MyFactorialDemo3 {
    public static void main(String[] args) {
        int result = getJc(5);
        System.out.println(result);
    }

    private static int getJc(int i) {
        //1,就是一定要找到出口.
        if(i == 1){
            return 1;
        }else{
            //2.就是递归的规则
            return i * getJc(i - 1);
       }
    }
    
}
22.递归-内存图【】(视频22) (5‘’)

在这里插入图片描述

经验

如果用循环解决问题不困难得话,可以使用循环,如果解决起来比较困难,可以考虑递归

自由练习-5分钟
快排
23.数组的高级操作-快排核心思路分析【】(视频23) (10‘’)

1.什么是快速排序?

​ 冒泡排序算法中,一次循环结束,就相当于确定了当前的最大值,也能确定最大值在数组中应存入的位置

​ 快速排序算法中,每一次递归时以第一个数为基准数,找到数组中所有比基准数小的.再找到所有比基准数大的.小的全部放左边,大的全部 放右边,确定基准数的正确位置

2.核心步骤

​ 1.从右开始找比基准数小的

​ 2.从左开始找比基准数大的

​ 3.交换两个值的位置

​ 4.红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止

​ 5.基准数归位

24.数组的高级操作-快排核心代码实现【】(视频24) (7‘’)
package com.itheima.myquitesort;

public class MyQuiteSortDemo {
    public static void main(String[] args) {
//        1,从右开始找比基准数小的
//        2,从左开始找比基准数大的
//        3,交换两个值的位置
//        4,红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
//        5,基准数归位
        int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

        quiteSort(arr,0,arr.length-1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quiteSort(int[] arr, int left, int right) {

        int left0 = left;
        int right0 = right;

        //计算出基准数
        int baseNumber = arr[left0];

        while(left != right){
//        1,从右开始找比基准数小的
            while(arr[right] >= baseNumber && right > left){
                right--;
            }
//        2,从左开始找比基准数大的
            while(arr[left] <= baseNumber && right > left){
                left++;
            }
//        3,交换两个值的位置
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        //基准数归位
        int temp = arr[left];
        arr[left] = arr[left0];
        arr[left0] = temp;
    }
}

25.数组的高级操作-快排完整实现【】(视频25) (4‘’)
package com.itheima.myquitesort;

public class MyQuiteSortDemo2 {
    public static void main(String[] args) {
//        1,从右开始找比基准数小的
//        2,从左开始找比基准数大的
//        3,交换两个值的位置
//        4,红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
//        5,基准数归位
        int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

        quiteSort(arr,0,arr.length-1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quiteSort(int[] arr, int left, int right) {
        if(right < left){
            return;
        }

        int left0 = left;
        int right0 = right;

        //计算出基准数
        int baseNumber = arr[left0];

        while(left != right){
//        1,从右开始找比基准数小的
            while(arr[right] >= baseNumber && right > left){
                right--;
            }
//        2,从左开始找比基准数大的
            while(arr[left] <= baseNumber && right > left){
                left++;
            }
//        3,交换两个值的位置
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        //基准数归位
        int temp = arr[left];
        arr[left] = arr[left0];
        arr[left0] = temp;

        quiteSort(arr,left0,left-1);//排左边
        quiteSort(arr,left +1,right0);//排右边

    }
}
Arrays工具类
26.Arrays【】(视频26) (7‘’)

1.什么是Arrays类?

​ 该类包含用于操作数组的各种方法

2.Arrays的常用方法

方法名说明
public static String toString(int[] a)返回指定数组的内容的字符串表示形式
public static void sort(int[] a)按照数字顺序排列指定的数组(快速排序)
public static int binarySearch(int[] a, int key)利用二分查找返回指定元素的索引

示例代码

package com.itheima.myarrays;

import java.util.Arrays;

public class MyArraysDemo {
    public static void main(String[] args) {
//        public static String toString(int[] a)    返回指定数组的内容的字符串表示形式
//        int [] arr = {3,2,4,6,7};
//        System.out.println(Arrays.toString(arr));


//        public static void sort(int[] a)	  按照数字顺序排列指定的数组
//        int [] arr = {3,2,4,6,7};
//        Arrays.sort(arr);
//        System.out.println(Arrays.toString(arr));

		
//        public static int binarySearch(int[] a, int key) 利用二分查找返回指定元素的索引
        int [] arr = {1,2,3,4,5,6,7,8,9,10};
        int index = Arrays.binarySearch(arr, 0);
        System.out.println(index);
        //1,数组必须有序
        //2.如果要查找的元素存在,那么返回的是这个元素实际的索引
        //3.如果要查找的元素不存在,那么返回的是 (-插入点-1)
            //插入点:如果这个元素在数组中,他应该在哪个索引上.
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InLoadwetrust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值