常用类(四)–Math
下面分别展示了这个求解绝对值,幂,开方,向上取整,向下取整等等诸多的方法的使用,以及使用这个random生成的是我们的0~1之间的任意的数据,如果我们想要生成这个a-b之间的任意的整数,这个时候我们就可以使用这个(int)(a+Math.random()*(b-a+1))这个公式进行对应的这个随机数的生成;
下面的这个生成的是2~7之间的随机整数,使用的就是我们提供的这个random生成随机整数的这个公式;
下面的这个方法是使用的循环的方式打印输出这个数组里面的每一个元素,也是可以实现这个遍历的效果的;
同样,我们可以使用这个Arrays里面的这个tostring方法,这样我们就可以去使用这个系统的方法去打印输出我们的这个数组里面的元素的内容,但是我们可以看到使用这个系统方法的时候,这个数组元素的外面实际上是需要加上这个中括号的;
这个是直接调用这个sort方法,这个时候就会进行这个默认的排序过程,而且是按照升序的过程进行排序的,使用这个Arrays.toString方法打印输出这个数组里面的所有的元素;
上面是进行的升序的排列过程,我们有没有方法去控制,定制一个降序的排列过程呢,这个其实是可以实现的:
这个里面实际上是定义一个匿名内部类,comparator接口,在这个接口里面,我们先是进行这个装箱的操作,把普通的数据类型转换为包装类,然后返回两个包装类的差值(其实这个本来是一个泛型编程的,但是我们修改之后使用的是这个object子类方法);
我们使用return i1-i2或者是这个return i2-i1就可以对于这个升序,降序的排列的过程进行控制;
这个底层的执行核心过程:就是下面的这个二分搜索的方法(使用调试打断点的方式不断的进入,就可以找到这个方法),这个里面实际上时调用了这个compare这个接口的,当我们的这个return内容不一样的时候,这个if else选择就不一样,因此就可以实现定制的排序的效果;
这个里面需要我们自己实现bubble02的冒牌排序的方法,这个方法里面是有两个参数的,第二个参数就是我们的comparator接口,我们的main方法里面对于这个接口里面的方法进行重写,这样我们通过动态的绑定机制就可以去调用我们自己实现的这个接口里面的compare方法,从而实现定制排序;
下面的这个就是二分查找的方法的调用,前提是我们的这个数组里面的元素是有序的;
第一个参数是我们的数组的名字,第二个参数就是我们的这个对应的想要查找的数据,返回值就是这个数据的下标,不存在返回负数;
下面的这个是负数的计算方法,low就是原来应该存在的位置,例如我们输入的这个8,原来应该是第七个位置,加上1之后取负数,就是-8;
下面的这个是进行的数组元素的拷贝,拷贝的长度可以我们自己人为设定:
下面的fill是填充的方法,这个方法的意思就是我们需要把这个数组里面的所有的元素换成我们的填充元素;
equlas方法判断两个数组元素的内容是不是完全一样的,返回的类型是bollean类型的;
我们下面分别按照书籍价格和书籍的名字的长度进行排序:
我们首先需要去编写这个类,这个类需要有构造器,构造函数,以及这个重写的tostring方法(方便我们打印输出这个比较之后的结果)
创建这个对象,这个对象就是我们后续进行比较的依据,我们还是重写这个里面的sort方法,使用的就是我们的匿名内部类,实现这个compare方法;
getprice返回的是这个double类型的数据,但是我们的这个接受的返回值是int类型的,这个时候我们就需要进行这个判断,返回我么自己的这个int数值(-1,1还是0),因为这个底层代码就是判断我们的这个方法的返回值是大于0还是小于0的;
下面的这个就是对于这个书名的长度进行判断,因为这个length就是一个int类型的,和我们的这个重写的compare方法的这个返回值类型是一样的,因此这个时候我们就可以不像上面的那样进行这个判断,而是把这个数值直接返回即可;