JAVA中常用的API
Math
System
Object
Objects
[外
链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wyCfq5Jc-1588172655493)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429124010300.png)]
package com.itheima.demo4;
import java.util.Objects;
public class MyObjectsDemo {
public static void main(String[] args) {
// public static String toString(对象) 返回参数中的对象的字符串表示形式。
Student s =new Student("小丁同学",24);
String result = Objects.toString(s);
System.out.println(result);
System.out.println(s);
// public static String toString(对象,默认字符串) 返回对象的字符串表示形式。如果对象为空返回第二个参数
Student s1 = null;
Student s =new Student("小花同学",23);
String result = Objects.toString(s1, "随便写一个");
System.out.println(result);
//public static Boolean isNull(对象) 判断对象是否为空
Student s = null;
boolean result = Objects.isNull(s);
System.out.println(result);
// public static Boolean nonNull(对象) 判断对象是否不为空
Student s = null;
boolean result = Objects.nonNull(s);
System.out.println(result);
}
}
BigDecimal
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3aJQhdbw-1588172655494)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429133317151.png)]
public class MyBigDecimal2 {
public static void main(String[] args) {
//主要的就是两个参数 int和String
BigDecimal bd1 = new BigDecimal(10.0);
BigDecimal bd2 = new BigDecimal("3.0");
System.out.println(bd1);
System.out.println(bd2);
}
bigdecimal类的常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tARF5vVP-1588172655495)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429134109426.png)]
特殊用法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JP0cUS8S-1588172655499)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429140232567.png)]
bigdecimal中使用来进行精确计算的
创建bigdecimal的对象,构造方法使用参数类型为字符串的。
四则运算中的除法,如果除不尽请使用divide中的三个参数的方法。
代码示例:
BigDecimal divide = bd1.divide(bd2, 10, BigDecimal.ROUND_UP);
参数1:参与运算的对象
参数2:精确到小数点后几位小数
参数3:舍入模式, 可以调用decimal中的舍入模式
基本类型包装类
基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作数据
常用操作之一:用于基本数据类型与字符串之间的转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cmwwVHMJ-1588172655502)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429142701199.png)]
Integer类的概述和使用
Interger:该对象中包装了一个基本数据类型int的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mEgxS56B-1588172655503)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429143757875.png)]
-
Integer -自动装箱和自动拆箱
-
装箱:把基本数据类型转换为对应的包装类型
-
拆箱:把包装类型转换成对应的基本数据类型
public class MyIntegerDemo3 { public static void main(String[] args) { Integer i1 = 100; // 对象 = 默认是一个基本数据类型 // JDK 1.5的特性 ---自动装箱 //装箱:把一个基本数据类型自动装起来 //自动:JAVA底层会帮我们自动调用valueOf方法 System.out.println(i1); // JDK 1.5的特性 ---自动拆箱 //拆箱:把一个包装类型 变成对应的基本数据类型 int i2 = i1; System.out.println(i2); Integer i3 = 100; //自动装箱机制 i3 += 200;// i3 = i3 + 200; //先把i3拆箱成100然后加上200 等于300 //最后把300 再次封装复赋值给 i3 System.out.println(i3); //细节 Integer i4 = null; //null 可以复制给引用数据类型 // i4 += 200; // 但是不能赋值给基本数据类型 if(i4 != null) { //解决方法:写一个if非空判断 i4 += 200; System.out.println(i4); } } }
-
注意 :只要是对象,在使用前最好进行非空判断
-
Integer-类型转换
- Integer的成员方法
static int parseInt(String s) 将字符串类型的整数转换为Int类型的整数
**总结:int 和 String的相互转换 **
基本类型包装类的最常见的操作就是:用于基本类型和字符串之间的互相转换
a. int 转String
方式一:加双引号 如String s2 = i3 + “”;
方式二:可以调用String类中的valueOf方法 如 String s3 = String.valueOf(i3);
b. String转int
public static int parseInt(String s) :将字符串解析为int类型。该方法是Integerl类中的方法
数组的高级操作
数组的基本查找
-
二分查找
前提数组的元素一定要按照大小顺序排列
-
首先定义一个min和一个max下表来确定查找的范围
-
然后根据min和max的值计算出中间点的值 mid=(min+max)/2 mid结果舍去小数
-
然后将需要查找的值与mid比较 如果小于则在前半部继续查找min不变,max变成原来的mid-1。
反之如果大于则在后半部继续查找max不变,min变成原来的mid+1。直到mid=需要查找的值
-
-
二分查找—元素不存在
当min>max时,则查找的元素不存在查找范围中
public class MyBinarySearchDemo1 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int number = 15;
//1.我现在要干什么 ---二分查找
//2.我干这件事情需要什么? --- 数组 元素
//3.我干完了要不要把结果返回调用着 --- 把索引返回给调用者
int index = binarySearchForIndex(arr, number);
System.out.println(index);
}
private static int binarySearchForIndex(int[] arr, int number) {
//1.定义查找的范围 min max
int min = 0;
int max = arr.length;
//2.循环查找 min <= max
while (min <= max) {
//3.计算出mid
int mid = (min + max) >> 1; //因为二进制的原因 所以又移一位就是除以2
//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就表示元素不存在
return -2;
}
}
冒泡排序
排序:将一组数据按照固定的规则进行排列
冒泡排序:相邻的数据两两比较,小的放前面,大的放后面。 经过多次循环最后排序完成
public class MyBubbleSortDemo1 {
public static void main(String[] args) {
int[] arr = {3, 5, 2, 1, 4};
bubblesort(arr);
}
private static void bubblesort(int[] arr) {
//外层循环控制的是循环次数 比数组长度少一
for (int i = 0; i < arr.length-1; i++) {
for (int J = 0; J < arr.length-1-i; J++) {
//内层循环就是实际的比较
//-1是为了不让数组越界
//-i是因为之前比过的就不需要再比了
if (arr[J] > arr[J + 1]) { //在java中两个元素值交换需要借助一个第三方变量
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();
}
}
递归
递归概述:以编程的角度来看,递归指的是方法定义中调用方法本省的现象
递归解决问题的思路:
把一个复杂的问题层层转化为一个与原问题相似的规模较小的的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算
递归解决问题要找到两个内容:
- 递归出口:否则会出现内存溢出
- 递归规则:与原问题相似的规模较小的问题
/*
* 求1-100之间的和
*/
public class MyFactorialDemo1 {
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);
}
}
}
快排
1. 以第一个数为基准
2. 从最右边开始找比基准数小的
3. 从最左边开始找比基准数大的
4. 交换两个值的位置
5. 继续找直到 两个寻找到同一个数为止
6. 最后将第一个数与5中找到的数比较,如果比它大则交换位置
在这一轮结束后 基准数左边的都比基准数小,右边反之
package com.itheima.d10MyQuickSort;
/*
快速排序的示例
*/
public class MyQuickSortDemo1 {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
private static void quickSort(int[] arr, int left, int right) {
if (right<left){
return;
}
//先用一个引用类型存储一下left,right 以便基准数归位之后调用(因为left和right在自增自减后值已经变了)
int left0 = 0;
int right0 = 0;
left0 = left;
right0 = right;
//设置基准数
int baseNumber = 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;
quickSort(arr,left0,left-1);
quickSort(arr,left+1,right0);
}
}
Arrays
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kw61ZtbJ-1588172655507)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200429222810177.png)]
package com.itheima.d11MyArrays;
import java.util.Arrays;
public class MyArrays {
public static void main(String[] args) {
// Arrays.toString 返回指定数组的内容的字符串表示形式
int [] arr ={3,5,7,2,3,6,8,};
System.out.println(Arrays.toString(arr));
//Arrays.sort(); 按照数字顺序排列指定数组
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//Arrays.binarySearch(); 利用二分法查找返回指定元素的索引
System.out.println(Arrays.binarySearch(arr, 6));
//此方法的注意点:
//1. 方法在调用之前必须要有序
//2.如果要查找的元素存在,那么返回的是这个元素实际的索引
//3.如果要查找的元素不存在,那么返回的是(-(插入点-1))
//插入点:如果这个元素在数组中,他应该在哪个索引上.
}
}