常见对象---一些工具类Arrays、Math、Random

一些小工具类Arrays、Math、Random

1. Arrays类

java.util.Arrays 针对数组进行操作的工具类,提供了查找、排序等功能。

(1) 数组转字符串toString()方法

static String toString(Object[] a) 返回指定数组内容的字符串表示形式

(2) 排序方法sort()方法

底层使用的是快排。
static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。

补充两种排序方式:冒泡排序法和选择排序法

A. 冒泡排序法:

第一轮,从第一个数开始,到倒数第二个数结束,依次比较相邻的两个元素,把大的放在后面,这样最大的数就在最后了;
第二轮,从第一个数开始,到倒数第三个数结束,重复步骤,这样第二大的数就在倒数第二位了;
重复以上过程,一直到从第一个数开始,到第二个数结束,从而完成了排序过程。

代码实现:

package cn.itcast;

public class demo {
    public static void main(String[] args) {
        int[] a = {20, 50, 14, 36, 89, 44};  //定义一个数组

        for (int i = 0; i < a.length - 1; i++) {   //外层,比较的轮数
            for (int j = 0; j < a.length - 1 - i; j++) { //内层,每轮比较的次数
         //从第一个元素开始,依次比较相邻元素,如果第一个比第二个大,则交换
                if (a[j] > a[j + 1]) {     
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}
B. 选择排序法:

第一轮,把第一个数依次与后面的数进行比较,如果大则交换位置,一直比到最后一个数,这样最小的数就出现在了第一个位置;
第二轮,从第二个数开始,重复比较,这样第二小的数就出现在了第二个位置;
重复以上过程,一直到从倒数第二个数开始,到最后一个数结束,从而完成了排序过程。

代码实现:

public class demo {
    public static void main(String[] args) {
        int[] a = {20, 50, 14, 36, 89, 44};  //定义一个数组

        for (int i = 0; i < a.length-1 ; i++) {
            for (int j = i+1; j < a.length; j++) {

                if (a[i] > a[j]) {
                    int temp = a[j];
                    a[j] = a[i];
                    a[i] = temp;
                }
            }

        }
    }
}
(3) 二分查找binarySearch()方法

static int binarySearch(int[] a, int key) 使用二分搜索法来搜索指定的 int 型数组,返回的是索引。
要注意:使用二分查找方法,被查找数组必须是有序的。

二分查找的原理:

  1. 在数组升序的的前提下,最小索引min = 0,最大索引max = 数组长度-1;
  2. 中间元素的索引mid = (min + max)/2;每次把被查找的元素与中间索引处的元素比较;
  3. 如果小了,则往左查,min不变,max = mid -1; 如果大了,则往右查,min = mid +1,max不变 ;直到相等时则返回索引;
  4. 要注意,要保证min一直是小于或等于max。

示例:

package cn.itcast;

import java.util.Arrays;

public class demo {
    public static void main(String[] args) {
        int[] a = {20,50,14,36,89,44};  //定义一个数组

        //toString()方法转为字符串输出
        System.out.println(Arrays.toString(a));

        //sort()方法排序后输出
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));

        //binarySearch()方法查找指定的值
        System.out.println(Arrays.binarySearch(a,14));
		
		//如果查找的数值小于最小值,则返回-1,大于最大值则返回-(数组长度+1)
        System.out.println(Arrays.binarySearch(a,13));
        System.out.println(Arrays.binarySearch(a,90));
    }
}
结果:
[20, 50, 14, 36, 89, 44]
[14, 20, 36, 44, 50, 89]
0
-1
-7

返回的是索引值。
如果被查找的数值小于数组中的最小值,则返回-1;
如果大于最大值则返回-(数组长度+1)。可以参考源码

binarySerach()方法源码

	public static int binarySearch(int[] a, int key) {
        return binarySearch0(a, 0, a.length, key);   //传入数组,0,数组长度,查找元素
    }
    
   private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;	 //起始索引
        int high = toIndex - 1;		//末尾索引

        while (low <= high) {     //必须保证起始索引<=末尾索引
            int mid = (low + high) >>> 1;  //无符号右移1位,相当于除以2
            int midVal = a[mid];  //取中间索引的元素

            if (midVal < key)     //大了,往右找
                low = mid + 1;
            else if (midVal > key)  //小了,往左找
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.  此时low为达到了最大,为toIndex - 1
    }

2. Math类

java.lang.Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

静态成员变量:
static double E 自然对数底e
static double PI 圆周率

常用方法都是静态方法:
static int abs(int a) 取绝对值
static double ceil(double a) 向上取整
static double floor(double a) 向下取整
static int max(int a,int b) 取最大值
static int min(int a,int b) 取最小值
static double pow(double a,doube b) 求a的b次幂
static double sqrt(double a) 开根号
static int round(float a) 四舍五入,其原理是任意数加上1/2然后取整
static double random() 生成随机数,范围[0.0,1.0)

要获取[strat,end)范围内的随机整数(int) Math.random()*(end-start+1)+start

3. Random类

java.util.Random类,用于生成随机数。

构造方法:
Random() 创建一个新的随机数生成器,默认种子是当前时间的毫秒值
Random(long seed) 使用单个 long 种子创建一个新的随机数生成器,如果给了种子,则每次产生的随机数都是相同的

常用方法:
int nextInt() 返回int范围内的随机数
int nextInt(int n) 返回[0,n)范围内的随机数

4. System类

java.lang.System类包含一些有用的类字段和方法。不能被实例化。

常用方法:
static void gc() 运行垃圾回收器。
static void exit(int status) 终止当前正在运行的 Java 虚拟机。 非 0 的状态码表示异常终止
static long currentTimeMillis() 返回以毫秒为单位的当前时间。
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 注意:
A. arraycopy命名是不规范
B.复制后改变的是目标数组,源数组不变。

示例:

package cn.itcast;
import java.util.Arrays;

public class demo {
    public static void main(String[] args) {
   		 //定义2个数组
        int[] arr = {20, 50, 14, 36, 89, 44};  
        int[] arr2 = {10, 43, 29, 56};
		//从arr数组的索引3开始,3个元素,复制到arr2数组的索引1处
        System.arraycopy(arr,3,arr2,1,3);
        System.out.println(Arrays.toString(arr));  //注意arr没有变
        System.out.println(Arrays.toString(arr2));	//改变的是arr2
    }
}
输出结果:
[20, 50, 14, 36, 89, 44]
[10, 36, 89, 44]  //arr2数组从索引1开始的三个元素,被复制成了arr数组中的索引3开始的3个元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值