星星之火-JAVA常用工具类

本文最后更新于:December 3, 2021 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

1.Math

  1. 求绝对值
1
2
3
4
5
6
7
int a = -123;
System.out.println(Math.abs(a)); // 123

//位运算。取反加1
int a = -1234;
int b = ~a+1;
System.out.println(b);
  1. 取最大或最小值
1
2
3
4
5
6
int a = 123;
int b = 456;
int m = Math.max(a,b);
int mi = Math.min(a,b);
System.out.println(m);
System.out.println(mi);
  1. 计算x的y次方
1
Math.pow(2, 10); // 2的10次方=1024
  1. 计算√x
1
Math.sqrt(2);
  1. 计算e的x次方
1
Math.exp(2);
  1. 计算以e为底的对数
1
Math.log(4);
  1. 计算以10为底的对数
1
Math.log10(100);
  1. 三角函数
1
2
3
4
5
Math.sin(3.14); // 0.00159...
Math.cos(3.14); // -0.9999...
Math.tan(3.14); // -0.0015...
Math.asin(1.0); // 1.57079...
Math.acos(1.0); // 0.0
  1. 数学常量
1
2
3
double pi = Math.PI; // 3.14159...
double e = Math.E; // 2.7182818...
Math.sin(Math.PI / 6); // sin(π/6) = 0.5
  1. 随机数
1
Math.random(); // 0.53907... 每次都不一样

2.Random

Random用来创建伪随机数。
要生成一个随机数,可以使用nextInt()、nextLong()、nextFloat()、nextDouble()。

1
2
3
4
5
6
7
8
9
10
Random r = new Random();
r.nextInt(); // 2071575453,每次都不一样
r.nextInt(10); // 5,生成一个[0,10)之间的int
r.nextInt()%10; // 生成-10到10的数

r.nextLong(); // 8811649292570369305,每次都不一样,不支持r.nextLong(10)这种写法
r.nextLong()%10; // 生成-10到10的数

r.nextFloat(); // 0.54335...生成一个[0,1)之间的float
r.nextDouble(); // 0.3716...生成一个[0,1)之间的double

3.SecureRandom

有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的。

1
2
SecureRandom sr = new SecureRandom();
System.out.println(sr.nextInt(100));

SecureRandom无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Arrays;
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;

public class Main {
public static void main(String[] args) {
SecureRandom sr = null;
try {
sr = SecureRandom.getInstanceStrong(); // 获取高强度安全随机数生成器
} catch (NoSuchAlgorithmException e) {
sr = new SecureRandom(); // 获取普通的安全随机数生成器
}
byte[] buffer = new byte[16];
sr.nextBytes(buffer); // 用安全随机数填充buffer
System.out.println(Arrays.toString(buffer));;
}
}

SecureRandom的安全性是通过操作系统提供的安全的随机种子来生成随机数。这个种子是通过CPU的热噪声、读写磁盘的字节、网络流量等各种随机事件产生的“熵”。

在密码学中,安全的随机数非常重要。如果使用不安全的伪随机数,所有加密体系都将被攻破。因此,时刻牢记必须使用SecureRandom来产生安全的随机数。


本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/104996264.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!