常用API
String、StringBuilder、StringBuffer
str.toCharArray(); 返回字符数组
str.length(); 返回字符串的长度
str.charAt(int index); 返回指定位置的字符
str.indexOf(String s); 返回s在字符串的位置,没找到返回-1
str.trim(); 返回将原字符串前导和尾随空格删除的字符串
str.split(" "); 返回以空格为区分后的字符数组
str.contains(String str); 如果包含str返回true
str.replaceFirst(str1, str2); 将字符串第一次出现的str1替换为str2
sb.insert(String str); 将str添加到当前sb中的指定位置
避免subList/subString陷阱
java.util.List 接口提供了一个实例方法
List subList(int fromIndex, int toIndex),
用于截取 原List 的一个以 fromIndex 为起始索引,以 toIndex 为终止索引(不包括)的子列表。
关于函数返回值使用的陷阱:
subList的实现代码在AbstractList类里,返回AbstractList的一个子类SubList
SubList将原来的list赋值给了l,只是改变了偏移量offset。
也就是说,subList函数返回了 原始list对象的引用。
这也就意味着,对原list和返回的list做的“非结构性修改”(指不涉及list大小改变的修改),都会影响到彼此。
比如对subList sort() 后,原list和子list都会被排序
如何避免陷阱:
- 正确使用subString/subList
subList / subString 适合处理局部的List/String时,比如删除局部的List
list.subList(begin, end).clear();
- 避免使用 subList / subString
如果有截取整体中较小的一段来做操作而不改变原整体的需要,或有截取一小段长期保存在内存中的需要
Collection
Stack
Stack<Integer> stack = new Stack<>();
stack.push(e); 把e压入堆栈顶部
stack.peek(); 查看堆栈顶部的对象,但不从堆栈中移除它
stack.pop(); 移除堆栈顶部的对象,并作为此函数的值返回该对象
stack.search(o); 返回对象在堆栈中的位置,从栈顶开始,以 1 为基数
stack.empty(); 测试堆栈是否为空
Queue
Queue<Integer> queue = new LinkedList<>();
stack.ofeer(e); 把e加入队列底部
stack.peek(); 查看队列底部的对象,但不从队列中移除它
stack.poll(); 移除队列底部的对象,并作为此函数的值返回该对象
stack.isEmpty(); 测试队列是否为空
Arrays
Arrays.toString(arrInt); 将数组转为字符串,类似list.toString
Arrays.binarySearch(arrInt, 44); 二分查找,需先排序过
Arrays.fill(arr,4); 将数组填充为4
Arrays.equals(arr1,arr2); 判断数组是否相等
Arrays.copyOf(arr, arr.length); 复制数组
Math
Math.max(long a, long b); 返回两个参数中较大的值
Math.sqrt(double a); 求参数的算术平方根
Math.abs(double a); 返回一个类型和参数类型一致的绝对值
Math.pow(double a, double b); 返回第一个参数的第二个参数次方。
Math.ceil(double x); 向上取整
Math.floor(double x); 向下取整
Math.round(double x); 四舍五入返回整数
Math.random(); 生成一个[0,1]之间的伪随机数
Integer
Integer.MAX_VALUE; 最大值
Integer.MIN_VALUE; 最小值
Integer.parseInt(String s); String—>int
Integer.toBinaryString(int i); 转二进制
Integer.toOctalString(int i); 转八进制
Integer.toHexString(int i); 转十六进制
Calendar
Calendar calendar = Calendar.getInstance(); 获取一个Calendar实例
calendar.set(Calendar.YEAR, year); 设置年(对Calender的属性赋值)
calendar.set(Calendar.MONTH, 11); 从0开始计数
calendar.set(Calendar.DAY_OF_MONTH, 31); 从1开始
calendar.get(Calendar.DAY_OF_WEEK); 取得当前这一天是一周的第几天,从1(周末)开始
BigInteger、BigDecimal和RoundingMode
大数操作,以字符串传入
//将 s 以 radix 进制传入bi
BigInteger bi=new BigInteger(String val, int radix);
//The BigInteger constant one
BigDecimal.ONE;
//加减乘除余,add、sutract、multiply、divide、remainder
bi1.add(bi2);
......
//java.math.RoundingMode
BigDecimal.ONE.divide(ratio,100,RoundingMode.HALF_UP);
Format
//DecimalFormat
DecimalFormat df=new DecimalFormat("#0.00");
System.out.println(df.format(31415.926535));
//SimpleDateFormat
new SimpleDateFormat("yyyy-MM-dd").format(getLastDay(2017, 9));