Java常用API
保留小数
RoundingMode.UP:向远离 0 的方向舍入(只要有非零尾数就“进一”)。
RoundingMode.DOWN:向靠近 0 的方向舍入(纯截断,丢弃尾数)。
RoundingMode.CEILING:向正无穷舍入(正数时等同 UP;负数时等同 DOWN)。
RoundingMode.FLOOR:向负无穷舍入(正数时等同 DOWN;负数时等同 UP)。
RoundingMode.HALF_UP:四舍五入(>= .005 进位,否则舍弃)。
RoundingMode.HALF_DOWN:四舍五入,但在恰好 .005 的情况下 “向下”(不进位)。
RoundingMode.HALF_EVEN:银行家舍入法(偶数舍入)。
double raw = 3.14159;
// 1. 截断(去尾)+ 遇非零就进一(“去尾进1”)
// 对于正数,可用 RoundingMode.UP 或 RoundingMode.CEILING;对于负数,若也要“绝对值截断再进1”,可用 UP;只对正数做“向正无穷”用 CEILING。
BigDecimal bdUp = new BigDecimal(Double.toString(raw))
.setScale(2, RoundingMode.UP);
System.out.println("去尾进1(UP): " + bdUp); // 3.15
NumberFormat fmtUp = new DecimalFormat("0.00");
fmtUp.setRoundingMode(RoundingMode.UP);
System.out.println("去尾进1(UP): " + fmtUp.format(raw)); // 3.15
ArrayList
底层实现:动态数组(基于Object[]),允许 null 元素,非线程安全。
核心方法:
add(E e):尾部添加元素(时间复杂度 O (1))。add(int index, E element):指定位置插入元素(O (n),需移动后续元素)。get(int index):根据索引获取元素(O (1))。set(int index, E element):替换指定位置元素(O (1))。remove(int index)/remove(Object o):删除元素(O (n),需移动元素)。size():获取元素个数。toArray():转为数组(常用Integer[] arr = list.toArray(new Integer[0]);)。
LinkedList
底层实现:双向链表,每个节点包含prev和next指针,非线程安全。
核心方法:
addFirst(E e)/addLast(E e):头尾插入元素(O (1))。getFirst()/getLast():获取头尾元素(空集合抛异常,需先用isEmpty()判断)。pollFirst()/pollLast():获取并移除头尾元素(空集合返回 null)。removeFirst()/removeLast():移除头尾元素(空集合抛异常)。iterator():链表迭代器,支持双向遍历(hasPrevious()/previous())。
PriorityQueue(优先队列)
底层实现:基于堆(二叉堆,默认小根堆)。
核心方法:
add(E e)/offer(E e):添加元素(自动调整堆结构,O (logn))。poll():取出并移除最小元素(堆顶,O (logn))。peek():查看最小元素。
HashMap
底层实现:JDK1.8 后采用 “数组 + 链表 + 红黑树”(链表长度≥8 且容量≥64 时转为红黑树),非线程安全。
核心方法:
put(K key, V value):插入键值对(若 key 存在则覆盖 value)。get(Object key):根据 key 获取 value(key 不存在返回 null)。containsKey(Object key):判断是否存在 key(比get!=null更高效)。keySet():获取所有 key 的 Set 集合。values():获取所有 value 的 Collection 集合。entrySet():获取所有键值对的 Set<Map.Entry>(遍历推荐)。 remove(Object key):删除键值对。
TreeMap
底层实现:红黑树,按键的自然顺序或自定义 Comparator 排序,非线程安全。
核心方法:
put(K key, V value):插入键值对(自动排序,key 需可比较)。get(Object key):根据 key 获取 value。firstKey()/lastKey():获取最小 / 最大 key。subMap(K fromKey, K toKey):获取 [fromKey, toKey) 范围的子映射。floorKey(K key):≤key 的最大 key;ceilingKey(K key):≥key 的最小 key。
String(不可变字符串)
特性:字符串常量池,每次修改会生成新对象。
核心方法:
charAt(int index):获取指定位置字符(索引从 0 开始)。substring(int beginIndex)/substring(int begin, int end):截取子串(左闭右开)。split(String regex):按正则表达式分割字符串(结果可能包含空字符串,需注意)。trim():去除首尾空格(中间空格保留)。equals(Object obj):判断内容相等(区分大小写);equalsIgnoreCase(String another):忽略大小写。compareTo(String anotherString):按字典序比较(返回负数 / 0 / 正数)。getBytes():转为字节数组(处理编码问题,如 UTF-8)。
StringBuilder & StringBuffer
特性:可变字符串,StringBuilder非线程安全(性能更高),StringBuffer线程安全(方法加锁)。
核心方法:
append(String str):拼接字符串(支持链式调用,如sb.append(a).append(b))。reverse():反转字符串。toString():转为 String 对象。delete(int start, int end):删除 [start, end) 区间的字符。insert(int offset, String str):在指定位置插入字符串。
BigInteger(大整数)
作用:处理超过long范围(±9e18)的整数运算,避免溢出。
核心方法:
- 构造方法:
new BigInteger(String val)(推荐),避免new BigInteger(int[])等复杂方式。 add(BigInteger val)/subtract()/multiply()/divide():加减乘除。mod(BigInteger m):取模运算。compareTo(BigInteger val):比较大小(返回 - 1/0/1)。toString():转为字符串(可指定进制,如toString(2)转二进制)。
BigDecimal(高精度小数)
作用:处理浮点数精度问题(如金融计算),避免double的精度丢失。
核心方法:
-
构造方法:
new BigDecimal(String val)(避免使用double构造,如new BigDecimal("0.1")而非new BigDecimal(0.1))。setScale(int newScale, RoundingMode roundingMode)
:设置小数位数,指定舍入模式(必须参数,否则抛异常)。
- 常用舍入模式:
RoundingMode.HALF_UP(四舍五入)、RoundingMode.DOWN(直接截断)。
add()/subtract()/multiply()/divide():运算方法(除法需指定 scale 和舍入模式,如divide(b, 2, RoundingMode.HALF_UP))。
| 方法 | 功能 | 示例 | 注意事项 |
|---|---|---|---|
add(BigInteger val) | 加法:this + val | a.add(b) | 结果为新的 BigInteger 对象(不可变) |
subtract(BigInteger val) | 减法:this - val | a.subtract(b) | 结果可能为负数 |
multiply(BigInteger val) | 乘法:this × val | a.multiply(b) | 大数乘法性能较低,避免多层循环中使用 |
divide(BigInteger val) | 除法:this ÷ val(取整) | a.divide(b) | 除数为 0 时抛ArithmeticException |
mod(BigInteger m) | 取模:this % m(结果符号与 m 一致) | a.mod(m) | m必须为正,否则抛ArithmeticException |
modPow(BigInteger exponent, BigInteger m) | 模幂:(this^exponent) mod m | a.modPow(exp, m) | 高效计算大指数模,竞赛高频(如 RSA 加密) |
pow(int exponent) | 幂运算:this^exponent | a.pow(5) | exponent≥0,负数抛ArithmeticException |
abs() | 绝对值 | a.abs() | 符号为负时返回正数 |
| 方法 | 功能 | 示例 | 注意事项 |
|---|---|---|---|
compareTo(BigInteger val) | 比较大小:<0(小)、=0(等)、>0(大) | a.compareTo(b) | 替代>/<运算符(BigInteger 是对象) |
equals(Object obj) | 判断值相等 | a.equals(b) | 必须用equals,==比较对象地址 |
longValue() | 转为long(截断) | a.longValue() | 超出long范围时结果错误(竞赛慎用) |
toString() | 转为十进制字符串 | a.toString() | 大整数输出时使用,避免科学计数法 |
toString(int radix) | 转为指定进制字符串(2-36) | a.toString(2) | 输出二进制、十六进制等场景 |