一、常用API
1.1 大数计数类
在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。
1.1.1 BigInteger
BigInteger 支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值。
要使用 BigInteger 类,首先要创建一个 BigInteger 对象。BigInteger 类提供了很多种构造方法,其中最直接的一种是参数以字符串形式代表要处理的数字。这个方法语法格式如下:
BigInteger(String val)
//这里的 val 是数字十进制的字符串
BigInteger big = new BigInteger("1")
//要将数字 1 转换为 BigInteger 对象
方法名称 | 解释 |
---|---|
add(BigInteger val) | 加法运算 |
subtract(BigInteger val) | 减法运算 |
multiply(BigInteger val) | 乘法运算 |
divide(BigInteger val) | 除法运算 |
remainder(BigInteger val) | 取余数运算 |
divideAndRemainder(BigInteger val) | 做除法运算,返回数组的第一个值为商,第二个值为余数 |
pow(int exponent) | 做参数的 exponent 次方运算 |
negate() | 取反运算 |
shiftLeft(int n) | 将数字左移 n 位,如果 n 为负数,则做右移操作 |
shiftRight(int n) | 将数字右移 n 位,如果 n 为负数,则做左移操作 |
and(BigInteger val) | 与运算 |
or(BigInteger val) | 或运算 |
compareTo(BigInteger val) | 数字的比较运算 |
equals(Object obj) | 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 否则返回 false |
min(BigInteger val) | 返回较小的数值 |
max(BigInteger val) | 返回较大的数值 |
1.1.2 BigDecimal
BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。
BigDecimal 常用的构造方法如下:
//实例化时将双精度型转换为 BigDecimal 类型
BigDecimal(double val)
//实例化时将字符串形式转换为 BigDecimal 类型
BigDecimal(String val)
方法名称 | 解释 |
---|---|
add(BigDecimal augend) | 加法运算 |
subtract(BigDecimal subtrahend) | 减法运算 |
multiply(BigDecimal multiplieand) | 乘法运算 |
divide(BigDecimal divisor,int scale,int roundingMode) | 除法运算,3 个参数分别表示除数、商的小数点后的位数和近似值处理模式 |
1.2 时间类
1.2.1 LocalDate
- LocalDate只能使用年月日,不包含时间和时区信息。
在进行实列化的时候不是通过new的方法进行实例化,而是通过now()方法来获取当前时间的对象:
LocalDate ld = LocalDate.now();
还可以使用of()方法来进行声名我们想要的事件对象:
LocalDate ld = LocalDate.of(2024,2,22);
而在实际使用的时候我们接收到的日期的参数往往是输入的字符串,而默认的字符串实例化格式只有一种那就是按照“2024-02-22T14:59:59”格式进行传入:
LocalDate ld = LocalDate.parse("2024-02-22");
1.2.2 LocalDateTime
- LocalDateTime可以使用年月日时分秒,包含时区信息。
实列化与上述一致:
LocalDateTime ldt = LocalDateTime.now();
LocalDateTime ldt = LocalDateTime.of(2024,2,22,14,59,59);
LocalDateTime ldt = LocalDateTime.parse("2024-02-22T14:59:59");
值得注意的是,LocDateTime类传入参数的,在年月日时分秒中年必须是四位、其余必须是两位不然不能正确解析,在年月日和时分秒之间必须用“T”来进行分隔开不然也会造成解析错误。
二、集合框架
- 集合是Java中用于存储多个对象的数据结构。
2.1 集合体系继承树
Java 集合可分为 Collection 和 Map 两种体系。
2.1.1 Collection接口
单列数据, 定义了存取一组对象的方法的集合。
- List: 元素有序、可重复的集合
- Set: 元素无序、不可重复的集合
2.1.2 Map接口
双列数据,保存具有映射关系“key-value对”的集合。
- Map:使用键值对(kye-value)存储,类似于数学上的函数 y=f(x),“x”代表 key,"y"代表 value,Key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。
2.2 遍历方式
2.2.1 迭代器遍历
- 创建迭代器对象
- 利用hashNext()与next()方法循环遍历
//多态的方式创建一个arraylist对象
Collection<String> coll = new ArrayList<>();
//添加元素
coll.add("abc");
//通过iterator方法创建迭代器对象
Iterator<String> it = coll.iterator();//默认获取集合的0索引
while (it.hasNext()){
String str = it.next();//获取元素 移动指针
System.out.println(str);
}
hashNext():返回一个bollean类型的值,如果迭代到了集合的末尾,返回false。
next():1.获取当前元素; 2.移动指针
注意:
- 遍历结束后,指针不会复位,如果再调用next()方法,会报错没有该实例。
- 遍历过程中不能使用集合的方法添加元素,会造成并发异常。
- 再次遍历就要重新获取迭代器对象,默认获取集合0索引。
2.2.2 增强for遍历
格式:
for(变量数据类型 变量名:集合名){}
Collection<String> coll = new ArrayList<>()
coll.add("abc");
coll.add("bcd");
// s是第三方变量
for (String s : coll) {
System.out.println(s);
}
注意:
- 所有的单列集合和数组才能使用增强for遍历。
- 这里的string s只是一个第三方变量,如果修改了s,不会改变集合里面的值。
三、List集合
List允许有重复元素,并且有序。
List集合下最常见的有两个:ArrayList 和 LinkedList。
- ArrayList底层是数组,遍历速度快。
- LinkedList底层是链表,增删速度快。