(max
)(min
)(abs
)(sqrt
)
int max = Math.max(1, 2); 最大值
int min = Math.min(1, 2); 最小值
int abs = Math.abs(1); 绝对值
double sqrt = Math.sqrt(1); 开平方
取绝对值
Java位运算 常见的位运算
(floor
)(ceil
)(round
)(rint
)
-----------------------------------------------------------------------------
# Math.floor → 取整取小 (地板)
-----------------------------------------------------------------------------
System.out.println(Math.floor(1.9));
System.out.println(Math.floor(1.6));
System.out.println(Math.floor(1.5));
System.out.println(Math.floor(1.2));
System.out.println(Math.floor(0.9));
System.out.println(Math.floor(0.5));
System.out.println(Math.floor(0.2));
System.out.println(Math.floor(0));
System.out.println(Math.floor(-0.2));
System.out.println(Math.floor(-0.5));
System.out.println(Math.floor(-0.9));
System.out.println(Math.floor(-1.2));
System.out.println(Math.floor(-1.5));
System.out.println(Math.floor(-1.6));
System.out.println(Math.floor(-1.9));
-----------------------------------------------------------------------------
# Math.ceil → 取整取大(天花板)
-----------------------------------------------------------------------------
System.out.println(Math.ceil(1.9));
System.out.println(Math.ceil(1.6));
System.out.println(Math.ceil(1.5));
System.out.println(Math.ceil(1.2));
System.out.println(Math.ceil(0.9));
System.out.println(Math.ceil(0.5));
System.out.println(Math.ceil(0.2));
System.out.println(Math.ceil(0));
System.out.println(Math.ceil(-0.2));
System.out.println(Math.ceil(-0.5));
System.out.println(Math.ceil(-0.9));
System.out.println(Math.ceil(-1.2));
System.out.println(Math.ceil(-1.5));
System.out.println(Math.ceil(-1.6));
System.out.println(Math.ceil(-1.9));
-----------------------------------------------------------------------------
# Math.round → 四舍五入 (0.5往大了进,1.5→2,-1.5→-1)
-----------------------------------------------------------------------------
System.out.println(Math.round(1.9));
System.out.println(Math.round(1.6));
System.out.println(Math.round(1.5));
System.out.println(Math.round(1.2));
System.out.println(Math.round(0.9));
System.out.println(Math.round(0.6));
System.out.println(Math.round(0.5));
System.out.println(Math.round(0.2));
System.out.println(Math.round(0));
System.out.println(Math.round(-0.2));
System.out.println(Math.round(-0.5));
System.out.println(Math.round(-0.6));
System.out.println(Math.round(-0.9));
System.out.println(Math.round(-1.2));
System.out.println(Math.round(-1.5));
-----------------------------------------------------------------------------
# Math.rint → 四舍五入 (0.5往偶数进,1.5→2,-1.5→-2)
-----------------------------------------------------------------------------
System.out.println(Math.rint(3.5));
System.out.println(Math.rint(2.5));
System.out.println(Math.rint(1.9));
System.out.println(Math.rint(1.6));
System.out.println(Math.rint(1.5));
System.out.println(Math.rint(1.2));
System.out.println(Math.rint(0.9));
System.out.println(Math.rint(0.6));
System.out.println(Math.rint(0.5));
System.out.println(Math.rint(0.2));
System.out.println(Math.rint(0));
System.out.println(Math.rint(-0.2));
System.out.println(Math.rint(-0.5));
System.out.println(Math.rint(-1.5));
System.out.println(Math.rint(-2.5));
System.out.println(Math.rint(-3.5));
强制类型转换
-----------------------------------------------------------------------------
# float强转为int(直接舍弃小数位)
-----------------------------------------------------------------------------
System.out.println((int) 3.0f);
System.out.println((int) 3.1f);
System.out.println((int) 3.2f);
System.out.println((int) 3.3f);
System.out.println((int) 3.4f);
System.out.println((int) 3.5f);
System.out.println((int) 3.6f);
System.out.println((int) 3.7f);
System.out.println((int) 3.8f);
System.out.println((int) 3.9f);
-----------------------------------------------------------------------------
# double强转为int(直接舍弃小数位)
-----------------------------------------------------------------------------
System.out.println((int) 3.0d);
System.out.println((int) 3.1d);
System.out.println((int) 3.2d);
System.out.println((int) 3.3d);
System.out.println((int) 3.4d);
System.out.println((int) 3.5d);
System.out.println((int) 3.6d);
System.out.println((int) 3.7d);
System.out.println((int) 3.8d);
System.out.println((int) 3.9d);
-----------------------------------------------------------------------------
# Integer/Integer(直接舍弃小数位)
-----------------------------------------------------------------------------
4/1
4/2
4/3
4/4
4/5
4/6
4/7
4/8
4/9
-----------------------------------------------------------------------------
# float/Integer(保留小数)
-----------------------------------------------------------------------------
4f/1
4f/2
4f/3
4f/4
4f/5
4f/6
4f/7
4f/8
4f/9
4.0f/1
4.0f/2
4.0f/3
4.0f/4
4.0f/5
4.0f/6
4.0f/7
4.0f/8
4.0f/9
-----------------------------------------------------------------------------
# double/Integer(保留小数)
-----------------------------------------------------------------------------
4.0d/1
4.0d/2
4.0d/3
4.0d/4
4.0d/5
4.0d/6
4.0d/7
4.0d/8
4.0d/9
-----------------------------------------------------------------------------
# 4.0/Integer(保留小数)(此时4.0默认为double)
-----------------------------------------------------------------------------
4.0/1
4.0/2
4.0/3
4.0/4
4.0/5
4.0/6
4.0/7
4.0/8
4.0/9
余数
-----------------------------------------------------------------------------
# 正数余数
-----------------------------------------------------------------------------
10%10
11%10
12%10
13%10
14%10
15%10
16%10
17%10
18%10
19%10
20%10
-----------------------------------------------------------------------------
# 负数余数
-----------------------------------------------------------------------------
-10%10
-11%10
-12%10
-13%10
-14%10
-15%10
-16%10
-17%10
-18%10
-19%10
-20%10
涉及思想
NC100 字符串转换成整数
HJ70 矩阵乘法计算量估算
Java8
归约和汇总:(count
) (max
、min
)(summingInt
、summingLong
、summingDouble
、sum
)(averagingInt
、averagingLong
、averagingInt
、average
)(summarizingInt
、summarizingLong
、summarizingDouble
)(joining
)(reducing
)
分组(groupingBy
+counting
、summingInt
、averagingInt
、maxBy
、minBy
、mapping
)
分区(partitioningBy
)
最大公约数、最小公倍数
# 计算一系列数字的最大公约数(gcd)
public static OptionalInt gcd(int[] numbers) {
return Arrays.stream(numbers).reduce((a, b) -> gcd(a, b));
}
private static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
# 计算数字数组的最低公共倍数(LCM)
public static OptionalInt lcm(int[] numbers) {
IntBinaryOperator lcm = (x, y) -> (x * y) / gcd(x, y);
return Arrays.stream(numbers).reduce((a, b) -> lcm.applyAsInt(a, b));
}
判断奇数,偶数
与运算(&)的用途
判断一个整数是否为2的整数次方
与运算(&)的用途
生成随机数
# 生成一个介于 Integer.MIN_VALUE 和 Integer.MAX_VALUE 之间的随机数。
public static int generateRandomInt() {
return ThreadLocalRandom.current().nextInt();
}
判断为质数
public boolean isPrime(int candidate) {
return IntStream.range(2, candidate).noneMatch(i -> candidate % i == 0);
}
# 对如上方法进行优化
public boolean isPrime(int candidate) {
return IntStream.rangeClosed(2, (int) Math.sqrt(candidate)).noneMatch(i -> candidate % i == 0);
}