Math类
介绍
Math类是一个提供了一系列静态方法用于执行基本数学运算的类。由于它是静态的,因此你不需要创建Math类的实例就可以使用其所提供的方法。
常用方法
基本运算
- Math.abs(int a):返回参数的绝对值。
- Math.max(int a,int b):返回两个参数中的较大值。
- Math.min(int a,int b):返回两个参数中的较小值。
System.out.println(Math.abs(-9));//输出绝对值9
int a=8;int b=9;
System.out.println(Math.max(a,b));//输出较大值9
System.out.println(Math.min(a,b));//输出较小值8
幂运算和平方根
- Math.pow(double a,double b):返回a的b次幂的值。
- Math.sqrt(double a):返回正确输入的a的算术平方根,a必须是非负的。如果为负则返回NaN(not a number)。
System.out.println(Math.pow(2,3));//输出2.0的3.0次方8.0
System.out.println(Math.sqrt(9));//输出9.0的算术平方根3.0
//两函数的参数要求是双精度浮点数,整形变量会被向上转型
四舍五入和取整
- Math.round(float/double a):返回最接近的int值(四舍五入)。
- Math.ceil(double a):返回大于或等于参数的最小double类型整数值(先向上舍入到最接近的整数值,再转为double类型进行输出)
- Math.floor(double a):返回小于或等于参数的最大double类型整数值(先向下舍入到最接近的整数值,再转为double类型进行输出)
System.out.println(Math.round(3.111));//输出3
System.out.println(Math.ceil(-3.1));//输出-3.0
System.out.println(Math.floor(3.1));//输出3.0
随机数
- Math.random():返回一个0.0<=x<1.0的值。
例:利用Math.random()方法获取[2,7]范围内的值。
(int) (2 + Math.random()*(7 - 2 + 1))
//Math.random()*(7-2)表示在(2,7)的长度范围取值
//即(0,5)的长度范围随机取长度再加上2
//因为强制转换(句首int)会丢失数据
//所以为实现取[2,7]的值,实际要得到[2,8)的值
//所以将(random[0,1)*5+1)+2)得到的double转为int即所求结果
Arrays类
介绍
在Java中,Arrsys类是一个包含用来操作数组的工具类。这个类中的所有方法也都是静态的,因此你不需要创建Arrays类的实例就可以使用其所提供的方法。
常用方法
- Arrays.toString():快捷遍历数组。之前我们如果想遍历某一数组中的所有元素,一般需要借助for循环,现在则可以直接使用Arrays类中的toString方法。
Integer[] num={1,5,9};
System.out.println(Arrays.toString(num));
//输出[1,5,9]
- Arrays.sort():对多种类型的数组进行排序,包括基本数据类型(如int [] 、douoble [] 、char [] 等)的数组。
public class Go {
public static void main(String[] args) {
Integer[] num = {5, 3, 8, 4, 2};
Arrays.sort(num); // 使用自然顺序进行排序
System.out.println(Arrays.toString(num)); // 输出: [2, 3, 4, 5, 8]
String[] str = {"banana", "apple", "pear"};
Arrays.sort(str); // 使用字符串的自然顺序进行排序
System.out.println(Arrays.toString(str)); // 输出: [apple, banana, pear]
}
}
同时,该方法还可自定义排序规则:该方法的重载版本 Arrays.sort(T[] a, Comparator<? super T>c),具体结构如下(<Integer>在此为泛型):
Integer[] num = {5, 3, 8, 4, 2};
Arrays.sort(num, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return 0;//不做改动
//return o2-o1;从大到小排序
//return o1-o2;从小到大排序
}
});
其中,return 0代表不做改动、return o2-o1代表从大到小排序、return o1-o2代表从小到大排序。该方法可通过传入一个接口 Comparator 实现自定义排序。调用自定义排序时,需要传入两个参数:(1)基本数据类型的数组,(2)实现了Comparator接口的匿名内部类,要求重写compere方法。
该方法会先判断接口是否为空,若不为空则执行TimSort类的binarySort(二叉树排序)方法,然后根据动态绑定机制,c.compare执行我们所传入的匿名内部类的compare()方法,该方法返回的值>0还是<0会直接影响排序的结果。
return 0代表返回值为0,故不做改动;
return o2-o1如果 o2 > o1 则返回一个正数,表示o2应该排在o1前面、如果 o2 < 01 则返回一个负数,表示o2应该排在o1后面。如果o2=o1,则返回 0。也就是从大到小排序。
return o1-o2同理,代表从小到大排序。
- Arrays.binarySearch():通过二分搜索法进行查找,要求数组为升序排列。如果在数组中找到了指定元素,该方法将返回该元素在数组中的索引;如果没有找到,它将返回一个负数,该负数的绝对值减 1 表示如果将该元素插入到数组中,它应该被插入的位置。
public class Go {
public static void main(String[] args) {
Integer[] num = {2,3,4,5,8};
System.out.println(Arrays.binarySearch(num, 5));//查找5,返回索引3
System.out.println(Arrays.binarySearch(num, 7));
//查找7,因为该数组中无7,所以返回索引-5,代表|-5|-1=4,该元素可放入num[4]
}
}
- Arrays.copyOf():拷贝原数组中指定数量的元素,如果该指定数量大于原数组的长度,则会使用null填充。
public class Go {
public static void main(String[] args) {
Integer[] num = {2,3,4,5,8};
Integer[] num1=Arrays.copyOf(num,3);
System.out.println(Arrays.toString(num1));//输出[2,3,4]
}
}
- Arrays.fill():数组填充,将指定的 int 值分配给指定 int 型数组的每个元素。
public class Go {
public static void main(String[] args) {
Integer[] num = {2,3,4,5,8};
Arrays.fill(num,6);
//此时num数组的值[6,6,6,6,6]
}
}
- Arrays.equals():比较两数组元素是否相同
public class Go {
public static void main(String[] args) {
Integer[] num = {2,3,4,5,8};
Integer[] num1 = {2,3,4,5,8};
Integer[] num2 = {6,6,6,6,6};
System.out.println(Arrays.equals(num,num1));//返回true
System.out.println(Arrays.equals(num,num2));//返回flase
}
}
- Arrays.asList():将一组值转化为list集合,返回的新集合编译类型为List,运行类型为java.util.Arrays#Arrayslist,是Arrays类的静态内部类。
public class Go {
public static void main(String[] args) {
Integer[] num = {2,3,4,5,8};
List mylist=Arrays.asList(num);
System.out.println("mylist="+mylist);
//mylist=[2, 3, 4, 5, 8]
System.out.println("mylist的运行类型:"+mylist.getClass());
//mylist的运行类型:class java.util.Arrays$ArrayList
}
}