API与数组的高级操作
一、常用API
1、Math类
主要进行数字运算。
- Math类不可实例化(构造方法被私有)。
- final修饰是最终类。
- 方法都被static修饰属于静态方法,可以通过类名调用。
- ab(int a) 取绝对值
- ceil(double a) 向上取整
- floor(double a) 向下取整
- min(int a,int b) 取最小值
- max(int a,int b) 取最大值
- round(float a) 四舍五入
- pow(int a,int b) 返回a的b次幂
- random() 返回double的正值[0.1,1.0)之间
2、System类
主要是跟系统相关类。
-
exit(int status) 终止当前正在运行的JVM虚拟机,非零为异常终止
-
currentTimeMillis() 返回当前时间(以毫秒为单位),通常用于获取执行程序的时间(结束时间-开始时间)计算机标准开始时间:1971年11月11日0时0分0秒
-
arrayCopy(数据源数组,起始索引,目的地数组,拷贝个数) 用于数组拷贝
3、Object类
1、toString方法
超类Object类提供的方法,打印的是地址值。
源码分析:
通常其子类会对其进行重写,打印的是对象中的值(数据)
2、equals方法
源码分析:equals在Object类中也是比较地址值。
对其重写后:
4、Objects类
- toString(对象) 返回参数中对象的字符串表现形式,就是相当于重写后的toString()方法。
- toString(对象,默认字符串) 当对象为空时,返回的是默认字符串中的内容。
6、包装类
- 基本数据类型封装成包装类的作用。可以在对象中定义更多的功能,将基本数据类型封装成对象,可以引用而更多的方法。常用操作:基本数据类型与字符串之间的操作,获取数据库,前端数据存储在Javabean中需要包装类进行存储。
基本数据类型 | 引用数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Char |
boolean | Boolean |
- 自动装箱:把一个基本类型自动变成对应引用类型 Integer i = 100;
- 自动拆箱:把一个引用类型自动变成对应基本类型int s = i;
- 基本类型与引用类型之间的相互转换
- parseInt(String s) 将字符串类型的整数转换成int类型的整数。
- valueOf(int i) 返回int参数的字符串表现形式。 或者加双引号变成字符串
二、数组高级操作
1、二分法查找
前提:数组排序有序。查找元素索引位置。
思路:元素索引位置index,定义一个最大值max,一个最小值min,一个中间值mod=max+min/2,循环比较,index在中间值的左边还是右边,在左边时最大值max为中间值mod-1,在右边时最小值min为中间值mod+1。当中间值所在的元素等于要查找的元素时输出中间值mod就是当前元素所在的位置。
查找步骤:
-
定义两个变量,表示要查找的范围,默认min=0,max=最大索引(数组名.length)
-
循环查找,但是min<=max
-
计算出中间值mod值(max+min/2)
-
判断mod位置的元素是否要查找的元素,如果是就直接返回对应索引
-
如果要查找的值在mod的左半边,那么min值不变,max=mod-1,继续下次查找
-
如果要查找的值在mod的右半边,那么max值不变,min=mod+1,继续下次查找
2、冒泡排序
将无序的数组排列成有序的数组。
3、递归
递归是指方法定义中调用方法本身的现象
思路:把一个复杂的问题层层转化为一个与原问题相类似规模较小的问题来求解,递归策略只需少量的程序就可以描绘出解题过程所需要的多次重复计算。
使用规则:递归要有出口,与原问题相似的规模较小的问题。
4、快排
快速排序算法中,每一次递归时以第一个数为基准数,找到数组中所有比基准数小的,在找到所有比基准数大的,小的全部放左边,大的全部放右边,确定基准数的正确位置。
public class 快排 {
public static void main(String[] args) {
int[] arr = {6,4,3,1,2,5,8,7,9};
KuaiPai(arr,0,arr.length-1);
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i]+"");
// }
System.out.println("=============");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
private static void KuaiPai(int[] arr, int left, int right) {
if (right<left){ //递归出口 左边>右边时结束程序
return;
}
int start = left; //零时存储(保存最开始的数,刚开始最左边和最右边的索引)
int end = right;
int mod = arr[start]; //确定基准数再开始左边第一个
while (right!=left){
while (mod<=arr[right]&&right>left){ //右边的值和基准数比较
right--; //右边的数大的话不跳出做--操作向左移动
}
while (mod>=arr[left]&&right>left){ //左边的值和基准数比较
left++; //左边的数小的话不跳出做++操作向右移动
}
int temp = arr[left]; //如果右边找到比基准数小的左边找到比基准数大的,就进行位置交换
arr[left]=arr[right];
arr[right]=temp;
}
int temp = arr[start]; //基准数归位,当左边与右边移动到同一个位置时,循环结束基准数与该数交换位置
arr[start] = arr[left];
arr[left]=temp;
KuaiPai(arr,start,left-1); //递归操作 再次调用自身方法进行排序操作,排序的是左半边
KuaiPai(arr,left+1,end); //递归操作 再次调用自身方法进行排序操作,排序的是右半边
}
}
5、Arrays类
-
Arrays.toString(int[] a) 返回指定数组的内容字符串形式(不用再通过循环遍历数组)
-
Arrays.sort(arr) 按照数组顺序排序(冒泡排序)
-
Arrays.binarySearch(int[] a,int key) 利用二分法查找元素所在索引位置(有序数组,要查的元素)