Math、Arrays、System、BigInteger 和 BigDecimal 类

一、Math

基本数学运算的方法,如初等指数、对数、平方根和三角函数

均为静态方法:

  1. public class MathMethod {
  2. public static void main(String[] args) {
  3. // 1. abs绝对值
  4. int abs = Math.abs(-9);
  5. // 2. pow求幂
  6. double pow = Math.pow(-3.5, 4); // 150.0625 -3.5的4次方
  7. // 3. ceil向上取整,返回>=该参数的最小整数
  8. double ceil = Math.ceil(-3.0001); // -3.0
  9. // 4. floor向下取整,返回<=该参数的最大整数
  10. double floor = Math.floor(-4.56); // -5.0
  11. // 5. round 四舍五入 +0.5再转成long
  12. long round = Math.round(5.51); // 6
  13. // 6. sqrt 开方
  14. double sqrt = Math.sqrt(9.0); // 3.0
  15. double sqrt1 = Math.sqrt(-9.0); // NaN
  16. // 7. random 返回的是[0,1)之间的随机小数
  17. // [a,b]之间的随机整数x (int)(a)<=x<=(int)(a+Math.random()*(b-a+1))
  18. // [2,7]之间的随机整数 (int)(a+Math.random()*(b-a+1))=(int)(2+Math.random()*6)
  19. // Math.random()*6返回的是0<=x<6的小数
  20. // 2+Math.random()*6返回的是2<=x<8的小数
  21. // (int)(2+Math.random()*6) 2<=x<=7
  22. System.out.println((int)(2+Math.random()*(7-2+1)));
  23. // max,min返回最大值和最小值
  24. int min = Math.min(1,9);
  25. int max = Math.max(1,9);
  26. }
  27. }

二、Arrays类

Arrays里面包含了一系列静态方法,用于管理或操作数组

  1. public class ArraysMethod01 {
  2. public static void main(String[] args) {
  3. Integer[] integers = {1,20,90};
  4. // 1. toString返回数组的字符串形式
  5. System.out.println(Arrays.toString(integers)); // [1, 20, 90]
  6. // 2. sort方法的使用
  7. Integer arr[] = {1, -1, 7, 0, 89};
  8. // (1)默认排序
  9. Arrays.sort(arr);
  10. System.out.println(Arrays.toString(arr)); // [-1, 0, 1, 7, 89]
  11. // (2)定制排序
  12. // 传入一个接口Comparator实现定制排序 调用定制排序是,传入排序的数组arr和实现了Comparator接口的匿名内部类,实现compare方法
  13. // 接口编程 源码
  14. // [1] Arrays.sort(arr, new Comparator<Integer>())
  15. // [2] 最终到private static <T> void binarySort(T[] a, int lo, int hi, int start, // Comparator<? super T> c)()
  16. // [3] 执行到binarySort 方法,根据动态绑定机制执行传入的匿名内部类的compare()
  17. // [4] new Comparator() {
  18. // @Override
  19. // public int compare(Object o1, Object o2) {
  20. // Integer i1 = (Integer) o1;
  21. // Integer i2 = (Integer) o2;
  22. // return i2 - i1;
  23. // }
  24. // }
  25. // [5] public int compare(Object o1, Object o2) 返回的值>0 还是 <0 会影响整个排序结果
  26. Arrays.sort(arr, new Comparator() {
  27. @Override
  28. public int compare(Object o1, Object o2) {
  29. Integer i1 = (Integer) o1;
  30. Integer i2 = (Integer) o2;
  31. // return i2 - i1;
  32. return i1 - i2;
  33. }
  34. });
  35. System.out.println(Arrays.toString(arr)); // return i2 - i1; [89, 7, 1, 0, -1]
  36. // return i1 - i2; [-1, 0, 1, 7, 89]
  37. Integer[] arr1 = {-1, 0, 1, 7, 89};
  38. // 3. binarySearch通过二分搜索法进行查找,要求必须有序
  39. // 数组无序,不能使用binarySearch
  40. int index = Arrays.binarySearch(arr1,7);
  41. System.out.println(index); // 3
  42. // 4. copyOf 数组元素的赋值
  43. // (1) 从arr1数组中,拷贝3个元素到newArr数组中
  44. // (2) 拷贝的长度>arr1.length在新数组后面增加null
  45. // (3) 拷贝的长度<0,抛出异常NegativeArraySizeException
  46. // 底层是System.arraycopy()
  47. Integer[] newArr = Arrays.copyOf(arr1,3); // [-1, 0, 1]
  48. Integer[] newArr1 = Arrays.copyOf(arr1,7); // [-1, 0, 1, 7, 89, null, null]
  49. // 5. fill数组元素的填充
  50. Integer[] num = new Integer[]{9,5,2};
  51. // 用99填充num数组
  52. Arrays.fill(num,99);
  53. System.out.println(Arrays.toString(num)); // [99, 99, 99]
  54. // 6. equals 比较两个数组元素是否完全一致
  55. // 一样,返回true,不完全一样,返回false
  56. System.out.println(Arrays.equals(arr,num)); // false
  57. // 7. asList 将一组值转换成list
  58. List asList = Arrays.asList(5,4,5,6,7);
  59. System.out.println(asList); // [5, 4, 5, 6, 7]
  60. System.out.println(asList.getClass()); // class java.util.Arrays$ArrayList
  61. }
  62. }

三、System类

  1. public class System_ {
  2. public static void main(String[] args) {
  3. // exit 退出当前程序
  4. //exit(0); // 程序退出,0表示正常的状态
  5. // arraycopy 复制数组元素,比较适合底层 一般用Arrays.copyOf完成复制数组
  6. int[] i1 = {1,2,3};
  7. int[] i2 = new int[3]; // 现在是[0,0,0]
  8. // Object src 源数组
  9. // int srcPos 从哪个索引位置开始拷贝
  10. // Object dest 目标数组
  11. // int destPos 把源数组的数据拷贝到目标数组的哪个索引
  12. // int length 拷贝多少个数据
  13. System.arraycopy(i1, 0, i2, 0,i1.length);
  14. System.out.println(Arrays.toString(i2)); //[1, 2, 3]
  15. // currentTimeMillis返回当前时间距离1970-1-1的毫秒数
  16. System.out.println(System.currentTimeMillis());
  17. }
  18. }

四、BigInteger 和 BigDecimal 类

BigInteger保存比较大的整型

  1. public class BigInteger_ {
  2. public static void main(String[] args) {
  3. BigInteger bigInteger = new BigInteger("2500004845551545");
  4. // 加减乘除要通过方法
  5. BigInteger bigInteger1 = new BigInteger("787867682543325");
  6. BigInteger add = bigInteger.add(bigInteger1); // 3287872528094870
  7. BigInteger sub = bigInteger.subtract(bigInteger1); // 1712137163008220
  8. BigInteger mul = bigInteger.multiply(bigInteger1); // 1969673024011778903377983187125
  9. BigInteger div = bigInteger.divide(bigInteger1); // 3
  10. System.out.println(div);
  11. }
  12. }

BigDecimal保存精度更高的浮点型

  1. public class BigDecimal_ {
  2. public static void main(String[] args) {
  3. BigDecimal bigDecimal = new BigDecimal("12.12548966");
  4. BigDecimal bigDecimal1 = new BigDecimal("4");
  5. System.out.println(bigDecimal.add(bigDecimal1)); // 16.12548966
  6. System.out.println(bigDecimal.subtract(bigDecimal1)); // 8.12548966
  7. System.out.println(bigDecimal.multiply(bigDecimal1)); // 48.50195864
  8. // 可能抛出异常 ArithmeticException
  9. // 在调用 divide 方法时,指定精度BigDecimal.ROUND_CEILING
  10. // 如果有无限循环小数,保留分子的精度
  11. System.out.println(bigDecimal.divide(bigDecimal1,BigDecimal.ROUND_CEILING)); // 3.031372415
  12. }
  13. }