Math&Random&ThreadLocalRandom类
Math类
//绝对值值运算:
Math.abs(18.999); //返回19.999这个数的绝对值
Math.abs(-12.58); // 返回-12.58这个数的绝对值,为12.58
//取值运算:
Math.signum(x); //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0
//取整运算:
Math.ceil(-13.56); //返回最近的且大于这个数的整数, 为14.0
Math.floor(-13.56); //返回最近的且小于这个数的整数, 为13.0
Math.rint(13.56); ////返回最接近这个数的整数,如果刚好居中,则取偶数,为14
//对数运算:
Math.log10(100); // 以10为底数的100的对数 ,为2
//指数运算:
Math.expm1(x); //e的x次幂 -
Math.pow(a,b); //a的b次幂
Math.scalb(x, y); //x*(2的y次幂)
//二次方根运算:
Math.sqrt(x); //x的二次方根
//三次方根运算:
Math.cbrt(x); //x的三次方根
//返回较大值和较小值:
Math.max(x, y); //返回x、y中较大的数
Math.min(x, y); //返回x、y中较小的数
//三角函数运算:
Math.sin(α); //sin(α)的值
Math.cos(α); //cos(α)的值
Math.tan(α); //tan(α)的值
//求角运算:
Math.asin(x/z); //返回角度值[-π/2,π/2] arc sin(x/z)
Math.acos(y/z); //返回角度值[0~π] arc cos(y/z)
Math.atan(y/x); //返回角度值[-π/2,π/2] arctan(y/x)
//随机值运算:
Math.random(); //随机返回[0,1)之间的无符号double值
Random&ThreadLocalRandom类
Random类
Random 是一个线程安全类,理论上可以通过它同时在多个线程中获得互不相同的随机数,但是在多线程的场景下需要多个线程竞争同一个原子变量的更新操作,性能不佳。
多线程性能参见:https://www.imooc.com/article/29739
有两种构造方法:
- Random():以当前系统时间作为种子。
- Random(long seed):使用单个 long 型整数作为种子。
public static void main(String[] args) {
Random rand = new Random();
//随机boolean值
System.out.println(rand.nextBoolean()); //true
//随机填充byte数组
byte[] buffer = new byte[16];
rand.nextBytes(buffer);
//[106, -85, 66, 108, 93, -22, 114, -67, -97, -99, 34, 126, 3, 66, -25, 59]
System.out.println(Arrays.toString(buffer));
//随机[0.0, 1.0) 区间的double值
System.out.println(rand.nextDouble()); //0.6032052834419511
//随机[0.0, 1.0) 区间的float值
System.out.println(rand.nextFloat()); //0.19521767
//随机int范围的整数
System.out.println(rand.nextInt()); //-1557426129
//随机生成[0, 15)区间的整数
System.out.println(rand.nextInt(15)); //6
//随机long范围整数
System.out.println(rand.nextLong()); //868994934892445287
}
ThreadLocalRandom类(推荐)
ThreadLocalRandon 类是 JDK 1.7 新增的一个类,它是 Random 的增强版,在并发访问的环境下,使用它来代替 Random 可以减少多线程资源竞争,最终保证系统具有更好的线程安全性。ThreadLocalRandom 类提供了一个静态方法来获取当前线程的随机数生成器:
ThreadLocalRandom rand = ThreadLocalRandom.current();
ThreadLocalRandom 方法的用法和 Random 基本类似,增加几个功能:
//返回一个boolean类型的随机数
public boolean nextBoolean();
//随机填充一个byte数组
public void nextBytes(byte[] bytes);
//返回一个[0.0,1.0)范围的float随机数
public float nextFloat();
//返回一个[0.0,1.0)范围的double随机数
public double nextDouble();
//返回一个[0.0-bound)之间的double随机数
public double nextDouble(double bound);
//返回一个[origin-bound)之间的随机数
public double nextDouble(double origin, double bound);
//返回一个整型的伪随机数
public int nextInt();
//返回一个[0,bound)之间的随机数
public int nextInt(int bound);
//返回一个[origin,bound)之间的随机数
public int nextInt(int origin, int bound);
//返回一个long型随机数
public long nextLong();
//返回一个[0,bound)之间的随机数
public long nextLong(long bound);
//返回一个[origin,bound)之间的随机数
public long nextLong(long origin, long bound);
参考
Math&Random&ThreadLocalRandom类的更多相关文章
- Random类和ThreadLocalRandom类
Random类和ThreadLocalRandom类 Random类用于生成一个伪随机数,他有两个构造方法:一个构造方法使用默认的种子(以当前时间作为种子),另一个构造方法需要显示传入一个long型整 ...
- java中ThreadLocalRandom类和Random类的使用
package frank; import java.lang.*; import java.util.*;//工具类一般都在util里面 import java.util.concurrent.Th ...
- Random类、ThreadLocalRandom类
Random和ThreadLocalRandom类均用于生成伪随机数. Random的构造函数: Random() 默认以系统当前时间为种子,相当于Random(System.currentT ...
- 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类
Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...
- Random类和Math.random()方法
一.Random类的定义Random类位于 java.util 包中,主要用于生成伪 随机数Random类将 种子数 作为随机算法的起源数字,计算生成伪随机数,其与生成的随机数字的区间无关创建Rand ...
- 调用类java.lang.Math的成员方法"public static double random"运算下面表达式10000次,统计其中生成的整数0,1,2,.....20的个数分别是多少,并输出统计结果.(int)(Math.random()*20+0.5)
public class Test2 { public static void main(String args[]){ int num; int count[]=new int[21]; for(i ...
- Math.random与java.util.Random的差别
今天在做一道习题时想到了Math.random()与Random类有什么区别,查阅了一些资料,感觉讲的不是太好. 首先两者的区别是一个是方法,一个是类. 其实前者的实现借助与后者.大家可以看一下Mat ...
- [JS]Math.random()
参考网址:http://www.soulteary.com/2014/07/05/js-math-random-trick.html [JS]Math.random()的二三事 看到题目,如果大家平时 ...
- random.nextInt()与Math.random()基础用法
相关文章:关于Random(47)与randon.nextInt(100)的区别 1.来源 random.nextInt() 为 java.util.Random类中的方法: Random类中还提供各 ...
随机推荐
- SQLSTATE[HY000] [2002] 错误
http://www.thinkphp.cn/topic/36194.html 使用tp框架 3.2.3 ,在windows上跑的时候没有任何问题,但是部署到linux系统和是哪个,就会报这个错,不知 ...
- Python--day69--pythonDjango终端打印SQL语句、在Python脚本中调用Django环境
Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...
- HDU 2191多重背包问题、
#include<cstdio> #include<cmath> #include<iostream> #include<cstring> +; int ...
- CentOS 安装 semanage 命令
CentOS 安装 semanage 命令 在服务器上运行: [root@ca1 ~]# yum install policycoreutils-python vim /etc/selinux/con ...
- LCA (最近公共祖先)倍增做法 —— O(nlogn)预处理 O(logn)(在线)查询
pa[a][j] 表示 a 结点的 2^j倍祖先(j = 0时 为直接父亲,j = 1时为父亲的父亲……) 1.首先预处理出所有结点的深度值dep和父亲结点 void dfs(int u, int f ...
- 【b804】双栈排序
Time Limit: 1 second Memory Limit: 50 MB [问题描述] Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入 ...
- 陈志生:德国信贷工厂风控模式对P2P的启发
上海合盘金融信息服务股份有限公司董事长陈志生 和讯银行消息 "2014中国金融论坛"于5月14-15日在北京召开,本次论坛主题为“全面深化金融体制改革与实体经济增长”.和讯网作为指 ...
- MySQL面试(二)
1.为什么索引遵循最左匹配原则? 当B+树的数据项是符合的数据结构,比如(name,age,sex)的时候,B+树是按照从左到右的顺序建立搜索树的.比如当(张三,20,F)这样的数据来检索的时候,b+ ...
- 【74.00%】【codeforces 747A】Display Size
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- router-link-active的作用
如上图所示,创建了3个路由跳转选项,css实现后的效果如下 ↓↓↓ 当我切换“电影” “影院” “我的” 三个路由选项时,文字由黑色变成红色 此时可用vue自带的 router-link-active ...