Math类,Array类

  1. Math的方法大都是静态的可以直接引用
    package com.jshedu.Math_;
    
    /**
     * @author jia
     * @version 1.0
     */
    public class MathMethod {
        public static void main(String[] args) {
            //看看Math常用的方法(静态方法)
            //1.abs 绝对值
            int abs = Math.abs(-9);
            System.out.println(abs);//9
            //2.pow 求幂
            double pow = Math.pow(2, 4);//2的4次方
            System.out.println(pow);//16
            //3.ceil 向上取整,返回>=该参数的最小整数(转成double);
            double ceil = Math.ceil(3.9);
            System.out.println(ceil);//4.0
            //4.floor 向下取整,返回<=该参数的最大整数(转成double)
            double floor = Math.floor(4.001);
            System.out.println(floor);//4.0
            //5.round 四舍五入  Math.floor(该参数+0.5)
            long round = Math.round(5.51);
            System.out.println(round);//6
            //6.sqrt 求开方
            double sqrt = Math.sqrt(9.0);
            System.out.println(sqrt);//3.0
    
            //7.random 求随机数
            //  random 返回的是 0 <= x < 1 之间的一个随机小数
            // 思考:请写出获取 a-b之间的一个随机整数,a,b均为整数 ,比如 a = 2, b=7
            //  即返回一个数 x  2 <= x <= 7
            // 老韩解读 Math.random() * (b-a) 返回的就是 0  <= 数 <= b-a
            // 1.这里可以理解Math.random() * 10这个意思不就是产生一个0-10不包括10的值嘛
            // 2.Math.random() * (b-a)产生一个0-(b-a)不包括b-a的值嘛,
            // 3.(b-a +1)就产生等于b-a的值了。
            // 4.a + Math.random() * (b-a +1),a加上产生的这个值不就变成了a-b之间的随机一个数。
            // (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )
            // (2) 使用具体的数给小伙伴介绍 a = 2  b = 7
            //  (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)
            //  Math.random()*6 返回的是 0 <= x < 6 小数
            //  2 + Math.random()*6 返回的就是 2<= x < 8 小数
            //  (int)(2 + Math.random()*6) = 2 <= x <= 7
            // (3) 公式就是  (int)(a + Math.random() * (b-a +1) )
            for(int i = 0; i < 100; i++) {
                System.out.println((int)(2 +  Math.random() * (7 - 2 + 1)));
            }
    
            //max , min 返回最大值和最小值
            int min = Math.min(1, 9);
            int max = Math.max(45, 90);
            System.out.println("min=" + min);
            System.out.println("max=" + max);
    
        }
    }
    

    random随机生成a-b之间的数

  2. Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)

    1. 定制排序

      package com.hspedu.arrays_;
      
      import java.util.Arrays;
      import java.util.Comparator;
      
      /**
       * @author jia
       * @version 1.0
       */
      public class ArraysSortCustom {
          public static void main(String[] args) {
      
              int[] arr = {1, -1, 8, 0, 20};
              //bubble01(arr);
      
              bubble02(arr, new Comparator() {
                  @Override
                  public int compare(Object o1, Object o2) {
                      int i1 = (Integer) o1;
                      int i2 = (Integer) o2;
                      return i2 - i1;// return i2 - i1;
                  }
              });
      
              System.out.println("==定制排序后的情况==");
              System.out.println(Arrays.toString(arr));
      
          }
      
          //使用冒泡完成排序
          public static void bubble01(int[] arr) {
              int temp = 0;
              for (int i = 0; i < arr.length - 1; i++) {
                  for (int j = 0; j < arr.length - 1 - i; j++) {
                      //从小到大
                      if (arr[j] > arr[j + 1]) {
                          temp = arr[j];
                          arr[j] = arr[j + 1];
                          arr[j + 1] = temp;
                      }
                  }
              }
          }
      
          //结合冒泡 + 定制
          public static void bubble02(int[] arr, Comparator c) {
              int temp = 0;
              for (int i = 0; i < arr.length - 1; i++) {
                  for (int j = 0; j < arr.length - 1 - i; j++) {
                      //数组排序由 c.compare(arr[j], arr[j + 1])返回的值决定
                      if (c.compare(arr[j], arr[j + 1]) > 0) {
                          temp = arr[j];
                          arr[j] = arr[j + 1];
                          arr[j + 1] = temp;
                      }
                  }
              }
          }
      }
      

      Comparator接口,里有一个compare方法

    2. package com.jshedu.arrays_;
      
      import java.util.Arrays;
      import java.util.Comparator;
      
      /**
       * @author 韩顺平
       * @version 1.0
       */
      public class ArraysMethod01 {
          public static void main(String[] args) {
      
              Integer[] integers = {1, 20, 90};
              //遍历数组
      //        for(int i = 0; i < integers.length; i++) {
      //            System.out.println(integers[i]);
      //        }
              //直接使用Arrays.toString方法,显示数组
      //        System.out.println(Arrays.toString(integers));//
      
              //演示 sort方法的使用
      
              Integer arr[] = {1, -1, 7, 0, 89};
              //进行排序
              //老韩解读
              //1. 可以直接使用冒泡排序 , 也可以直接使用Arrays提供的sort方法排序
              //2. 因为数组是引用类型,所以通过sort排序后,会直接影响到 实参 arr
              //3. sort重载的,也可以通过传入一个接口 Comparator 实现定制排序
              //4. 调用 定制排序 时,传入两个参数 (1) 排序的数组 arr
              //   (2) 实现了Comparator接口的匿名内部类 , 要求实现  compare方法
              //5. 先演示效果,再解释
              //6. 这里体现了接口编程的方式 , 看看源码,就明白
              //   源码分析
              //(1) Arrays.sort(arr, new Comparator()
              //(2) 最终到 TimSort类的 private static <T> void binarySort(T[] a, int lo, int hi, int start,
              //                                       Comparator<? super T> c)()
              //(3) 执行到 binarySort方法的代码, 会根据动态绑定机制 c.compare()执行我们传入的
              //    匿名内部类的 compare ()
              //     while (left < right) {
              //                int mid = (left + right) >>> 1;
              //                if (c.compare(pivot, a[mid]) < 0)
              //                    right = mid;
              //                else
              //                    left = mid + 1;
              //            }
              //(4) new Comparator() {
              //            @Override
              //            public int compare(Object o1, Object o2) {
              //                Integer i1 = (Integer) o1;
              //                Integer i2 = (Integer) o2;
              //                return i2 - i1;
              //            }
              //        }
              //(5) public int compare(Object o1, Object o2) 返回的值>0 还是 <0
              //    会影响整个排序结果, 这就充分体现了 接口编程+动态绑定+匿名内部类的综合使用
              //    将来的底层框架和源码的使用方式,会非常常见
              //Arrays.sort(arr); // 默认排序方法
              //定制排序
              Arrays.sort(arr, new Comparator() {
                  @Override
                  public int compare(Object o1, Object o2) {
                      Integer i1 = (Integer) o1;
                      Integer i2 = (Integer) o2;
                      return i2 - i1;
                  }
              });
              System.out.println("===排序后===");
              System.out.println(Arrays.toString(arr));//
      
      
      
          }
      }
      

      原码分析,看调用哪个方法。

    3. asList将一组值转换成list

      package com.jshedu.arrays_;
      
      import java.util.Arrays;
      import java.util.List;
      
      /**
       * @author 韩顺平
       * @version 1.0
       */
      public class ArraysMethod02 {
          public static void main(String[] args) {
              Integer[] arr = {1, 2, 90, 123, 567};
              // binarySearch 通过二分搜索法进行查找,要求必须排好
              // 老韩解读
              //1. 使用 binarySearch 二叉查找
              //2. 要求该数组是有序的. 如果该数组是无序的,不能使用binarySearch
              //3. 如果数组中不存在该元素,就返回 return -(low + 1);  // key not found.
              //low代表的是应该存在的位置。568应该存在567后面下标应该是5,在加1,取负数-6
              int index = Arrays.binarySearch(arr, 568);
              System.out.println("index=" + index);//-6
      
              //copyOf 数组元素的复制
              // 老韩解读
              //1. 从 arr 数组中,拷贝 arr.length个元素到 newArr数组中
              //2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
              //3. 如果拷贝长度 < 0 就抛出异常NegativeArraySizeException
              //4. 该方法的底层使用的是 System.arraycopy()
              //5. 可以拷0个,就是空数组
              Integer[] newArr = Arrays.copyOf(arr, arr.length+1);
              System.out.println("==拷贝执行完毕后==");
              System.out.println(Arrays.toString(newArr));//[1, 2, 90, 123, 567, null]
      
              //fill 数组元素的填充
              Integer[] num = new Integer[]{9,3,2};
              //老韩解读
              //1. 使用 99 去填充 num数组,可以理解成是替换原理的元素
              Arrays.fill(num, 99);
              System.out.println("==num数组填充后==");
              System.out.println(Arrays.toString(num));//[99, 99, 99]
      
              //equals 比较两个数组元素内容是否完全一致
              Integer[] arr2 = {1, 2, 90, 123};
              //老韩解读
              //1. 如果arr 和 arr2 数组的元素一样,则方法true;
              //2. 如果不是完全一样,就返回 false
              boolean equals = Arrays.equals(arr, arr2);
              System.out.println("equals=" + equals);//equals=false
      
              //asList 将一组值,转换成list
              //老韩解读
              //1. asList方法,会将 (2,3,4,5,6,1)数据转成一个List集合
              //2. 返回的 asList 编译类型 List(接口)
              //3. asList 运行类型 java.util.Arrays#ArrayList, 是Arrays类的
              //   静态内部类 private static class ArrayList<E> extends AbstractList<E>
              //              implements RandomAccess, java.io.Serializable
              List asList = Arrays.asList(2,3,4,5,6,1);
              System.out.println("asList=" + asList);//asList=[2, 3, 4, 5, 6, 1]
              System.out.println("asList的运行类型" + asList.getClass());
      
      
      
          }
      }
      

      编译类型,运行类型

  3. Array练习

    package com.hspedu.arrays_;
    
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    /**
     * @author 韩顺平
     * @version 1.0
     */
    public class ArrayExercise {
        public static void main(String[] args) {
            /*
            案例:自定义Book类,里面包含name和price,按price排序(从大到小)。
            要求使用两种方式排序 , 有一个 Book[] books = 4本书对象.
    
            使用前面学习过的传递 实现Comparator接口匿名内部类,也称为定制排序。
            [同学们完成这个即可 10min  ],
            可以按照 price (1)从大到小 (2)从小到大 (3) 按照书名长度从大到小
    
             */
    
            Book[] books = new Book[4];
            books[0] = new Book("红楼梦", 100);
            books[1] = new Book("金瓶梅新", 90);
            books[2] = new Book("青年文摘20年", 5);
            books[3] = new Book("java从入门到放弃~", 300);
    
            //(1)price从大到小
    
    //        Arrays.sort(books, new Comparator() {
    //            //这里是对Book数组排序,因此  o1 和 o2 就是Book对象
    //            @Override
    //            public int compare(Object o1, Object o2) {
    //                Book book1 = (Book) o1;
    //                Book book2 = (Book) o2;
    //                double priceVal = book2.getPrice() - book1.getPrice();
    //                //这里老师进行了一个转换
    //                //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
    //                if(priceVal > 0) {
    //                    return  1;
    //                } else  if(priceVal < 0) {
    //                    return -1;
    //                } else {
    //                    return 0;
    //                }
    //            }
    //        });
    
            //(2)price从小到大
    //        Arrays.sort(books, new Comparator() {
    //            //这里是对Book数组排序,因此  o1 和 o2 就是Book对象
    //            @Override
    //            public int compare(Object o1, Object o2) {
    //                Book book1 = (Book) o1;
    //                Book book2 = (Book) o2;
    //                double priceVal = book2.getPrice() - book1.getPrice();
    //                //这里老师进行了一个转换
    //                //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
    //                if(priceVal > 0) {
    //                    return  -1;
    //                } else  if(priceVal < 0) {
    //                    return 1;
    //                } else {
    //                    return 0;
    //                }
    //            }
    //        });
    
            //(3)按照书名长度从大到小
    
            Arrays.sort(books, new Comparator() {
                //这里是对Book数组排序,因此  o1 和 o2 就是Book对象
                @Override
                public int compare(Object o1, Object o2) {
                    Book book1 = (Book) o1;
                    Book book2 = (Book) o2;
                    //要求按照书名的长度来进行排序
                    return book2.getName().length() - book1.getName().length();
                }
            });
    
    
            System.out.println(Arrays.toString(books));
    
        }
    }
    
    class Book {
        private String name;
        private double price;
    
        public Book(String name, double price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "name='" + name + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值