一、数学操作类
代码演示如下:
public class MathClass {
@Test
void math01() {
// 圆周率
System.out.println(Math.PI);
// 底数
System.out.println(Math.E);
}
// 方法的使用
@Test
void math02() {
// 对于数字的操作
Byte b = -10;// 自动装箱
System.out.println("三次方" + Math.cbrt(1000));// 三次方10.0
System.out.println("最大整数" + Math.ceil(10.4));// 最大整数11.0
}
// random类
@Test
void math03() {
// 随机数
Random random = new Random();// 默认随机数生成器
// 获取随机数
// 所有int类型的范围值
System.out.println(random.nextInt());
// 所有double类型的范围值
System.out.println(random.nextDouble());
// 所有float类型的范围值
System.out.println(random.nextFloat());
// 所有Boolean类型的范围值
System.out.println(random.nextBoolean());
// 0到指定正数之间的随机数
System.out.println(random.nextInt(10));
// 将得到的随机数放到指定的byte数组中
byte[] b = new byte[10];
random.nextBytes(b);
System.out.println(b[0]);
}
}
注意事项:
- Math是用来对数字及三角函数进行操作的,所以方法都是静态的
- Random主要是用来获取随机数的,如果使用种子,多个不同随机数生成器会得到相同的随机数
// 使用同一个种子 作为随机数的生成器
@Test
void math06() {
Random random=new Random(200);//默认随机数生成器
Random random01=new Random(200);//默认随机数生成器
System.out.println(random.nextInt(10));
System.out.println(random01.nextInt(10));
System.out.println(random.nextInt(10));
System.out.println(random01.nextInt(10));
}
二、数组操作类 Arrays
- 该类专门用来操作数组
- 数组可以存放任意类型的数据
1、方法
填充
- fill( Object [] a,int fromIndex,int toIndex,Object val);
a - 要填充的数组。
fromIndex - 要使用指定值填充的第一个元素的索引(包括)。
toIndex - 要使用指定值填充的最后一个元素的索引(不包括)。
val - 要存储在数组的所有元素中的值。
- fill( Object [ ] a ,Object val);
a - 要填充的数组。
val - 要存储在数组所有元素中的值。
排序 - sort( Object [] a);
- sort( Object [] a, int fromIndex,int toIndex);
查询 - binarySearch(Object[] a, Object key)
a - 要搜索的数组。
key - 要搜索的值。
复制 - copyOf(byte[] original, int newLength) ;
比较
- equals(Object[] a, Object[] a2) ;
具体操作见代码
int [] nums = new int [] {10,20,30,10,3,40};
//填充或者替换
@Test
void fill() {
//100 将nums中的所有元素都替换掉
Arrays.fill(nums, 100);
System.out.println(Arrays.toString(nums));//[100, 100, 100, 100, 100, 100]
//替换部分元素值
/*
* 第一个参数:要操作的数组
* 第二个参数:起始下标
* 第三个参数:结束下标
* 第四个参数:值
*/
Arrays.fill(nums, 0,3,50);
System.out.println(Arrays.toString(nums));//[50, 50, 50, 100, 100, 100]
}
//排序,底层是冒泡排序
@Test
void sort() {
//正序排列
Arrays.sort(nums);
System.out.println("排序后的结果"+Arrays.toString(nums));//排序后的结果[3, 10, 10, 20, 30, 40]
//反向输出
for(int i = nums.length-1;i>=0;i--) {
System.out.print(nums[i]+"--");//40--30--20--10--10--3--
}
}
//查询
@Test
void select() {
//返回值是找到的元素下标
int binarySearch = Arrays.binarySearch(nums,20);
System.out.println(binarySearch);//1
}
//复制
@Test
void copy() {
int [] nums = new int [] {10,20,30,10,3,40};
int [] newnum = new int[6];
//自动得到一个新的数组
/*
* 原数组
* 复制几个元素
*/
int[] copyOf = Arrays.copyOf(nums, 3);
System.out.println(Arrays.toString(copyOf));//[10, 20, 30]
}
//比较。比较的是数组中的元素值,元素一样,数组就相等
@Test
void equals() {
int [] nums = new int [] {10,20,30,10,3,40};
int [] newnum = new int[6];
int [] nums01 = new int [] {10,20,30,10,3,40};
System.out.println(Arrays.equals(nums, newnum));//false
System.out.println(Arrays.equals(nums, nums01));//true
}
三、大数据类
- java的基本数据类型无法表示的类,数字
- 整数型,BigInteger,底层使用的将字符串转为二进制形式,进行底层计算
@Test
void biginteger() {
BigInteger big01 = new BigInteger("1234567890123123456789");
BigInteger big02 = new BigInteger("1234567890123123456789");
//使用BigInteger的数字计算方法
BigInteger add = big01.add(big02);
System.out.println("相加"+add);//相加2469135780246246913578
BigInteger multiply = big01.multiply(big02);
System.out.println("相乘"+multiply);//相乘1524157875323060632530163196031672750190521
BigInteger divide = big01.divide(big02);
System.out.println("相除"+divide);//相除1
BigInteger remainder = big01.remainder(big02);
System.out.println("取余"+remainder);//取余0
}
- 小数型,使用float或者double进行运算,由于小数精度的问题,损失精度
@Test
void bigDecimal() {
System.out.println(0.09+0.01);
System.out.println(0.09-0.01);
System.out.println(0.09*0.01);
System.out.println(0.09/0.01);
//bigDecimal操作
BigDecimal bd01 = new BigDecimal("0.09");
BigDecimal bd02 = new BigDecimal("0.01");
System.out.println("相加"+bd01.add(bd02));//相加0.10
System.out.println("相乘"+bd01.multiply(bd02));//相乘0.0009
System.out.println("相除"+bd01.divide(bd02));//相除9
}
四、其他类MD5
将密码使用特定的方式进行转换,称为加密
1、16进制转换
java中提供了一个类:MessageDigest
步骤如下:
- 创建加密原则
- 将初始密码放入加密类中
- 选择一种展示方式
2、Base64加密方式
java中提供了一个类:Base64
步骤如下: - 创建加密器
- 对铭文进行加密
String password = "123456";
@Test
void jinzhi() {
try {
//创建加密原则
//返回一个摘要对象实现指定的摘要算法
MessageDigest md = MessageDigest.getInstance("md5");
//将初始密码放入加密类中
//使用指定的字节数组来更新摘要
md.update(password.getBytes());
//选择一种展现方式
BigInteger bigInteger = new BigInteger(1,md.digest());
//使用具体的进制方式
System.out.println(bigInteger.toString(16));//e10adc3949ba59abbe56e057f20f883e
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//base64加密方式,可逆加密方式
@Test
void base64() {
//获取加密器
//创建解码器
Encoder encoder = Base64.getEncoder();
//创建解码器
Decoder decoder = Base64.getDecoder();
//编码
String encodeToString = encoder.encodeToString(password.getBytes());
System.out.println(encodeToString);//MTIzNDU2
//怎么进行解密
byte[] decode = decoder.decode("MTIzNDU2");
System.out.println(new String(decode));//123456
}