1.API(应用程序编程接口)
概述:指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
1.1 Math
调用方式:类名.XXX
方法名 方法名 | 说明 |
---|---|
public static int abs(int a) | 返回参数的绝对值 |
public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 |
public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 |
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) |
1.2 System
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
下面是 System.arrayCopy的源代码声明 :
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
代码解释:
Object src : 原数组
int srcPos : 从元数据的起始位置开始
Object dest : 目标数组
int destPos : 目标数组的开始起始位置
int length : 要copy的数组的长度
1.3 Object
概述:Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份
-
toString方法
作用:在子类中重写toString()方法,以便能更清晰的查看对象变量的值。
重写toString方法的方式:
1.Alt + Insert 选择toString
2.在类的空白区域,右键 -> Generate -> 选择toString
-
equals方法
作用:在不重写的情况下,默认比较对象的地址值,返回类型是boolean类型。重写以后,可以结合对象属性进行比较。
重写equals方法的方式:
1.alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
2.在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
1.4 Objects
-
equals方法(可以判断空指针异常,对其做了优化)
值是 null 的情况:
a.equals(b) 当 a 是 null 的时候,抛出 NullPointerException 异常
a.equals(b) 当 a 不是 null,b 是 null 的时候,返回 false
Objects.equals(a,b) 比较时,a 或者 b 即使是 null 时,也不抛异常
1.5 BigDecimal
作用:可以用来进行精确计算
注:1.BigDecimal是用来进行精确计算的
2.创建BigDecimal的对象,构造方法使用参数类型为字符串的。
3.四则运算中的除法,如果除不尽请使用divide的三个参数的方法。
格式:public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)
BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
参数1,表示参与运算的BigDecimal对象。
参数2,表示小数点后面精确到多少位
参数3,舍入模式
BigDecimal.ROUND_UP 进一法
BigDecimal.ROUND_FLOOR 去尾法
BigDecimal.ROUND_HALF_UP 四舍五入
1.6 Arrays
-
Arrays的常用方法
方法名 | 说明 |
---|---|
public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
public static int binarySearch(int[] a, int key) | 利用二分查找返回指定元素的索引 |
-
示例代码
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)
//插入点:如果这个元素在数组中,他应该在哪个索引上.
}
}
2.基本类型包装类
作用:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.1 Integer类
概述:包装一个对象中的原始类型 int 的值
构造方法:
方法名 | 说明 |
---|---|
public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 |
public static Integer valueOf(String s) | 返回一个保存指定值的 Integer 对象 String |
2.2自动拆箱和自动装箱
-
自动装箱
把基本数据类型转换为对应的包装类类型
-
自动拆箱
把包装类类型转换为对应的基本数据类型
-
示例代码
Integer i = 100; // 自动装箱 i += 200; // i = i + 200; i + 200 自动拆箱;i = i + 200; 是自动装箱
2.3int和String类型的相互转换
-
int -> String
-
方式一:直接在数字后加一个空字符串
-
方式二:通过String类静态方法valueOf()
-
-
String -> int
-
方式一:先将字符串数字转成Integer,再调用intValue()方法
-
方式二:通过Integer静态方法parseInt()进行转换
-
3.递归
介绍:方法定义中调用方法本身,把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,只需少量的程序就可描述出解题过程所需要的多次重复计算。
注意事项:1.递归一定要有出口。否则内存溢出
2.递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出
4.数组的高级操作
4.1二分查找(折半查找)
概述:每次可以去掉一半的查找范围,从而提高查找效率。
使用前提条件:数组内的元素一定要按照从小到大的顺序排列
实现步骤:
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.
代码实现:
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;
}
}
4.2冒泡排序
概述:对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序。
如果有n个数据进行排序,总共需要比较n-1次。一次循环结束,就相当于确定了当前的最大值,也能确定最大值在数组中应存入的位置。(外层循环次数)
每一次比较完毕,下一次的比较就会少一个数据参与。(内层循环次数)
代码实现:
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;
}
}
}
printArr(arr);
}
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
4.3快速排序
概述:每一次递归时以第一个数为基准数,找到数组中所有比基准数小的.再找到所有比基准数大的.最后小的全部放左边,大的全部放右边,基准数在中间,确定了基准数的正确位置。
核心步骤:
1.从右开始找比基准数小的
2.从左开始找比基准数大的
3.交换两个值的位置
4.红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
5.基准数归位
代码实现:
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);
}
}