初始化队列or栈
Queue<T> que = new LinkedList();
Stack<T> stk = new Stack();
hashmap基于value排序:
//map不是有序的,只能先转成list,再排序list,最后是新创建的list有序,map还是无序的。
List<Map.Entry<Character , Integer>> list = new ArrayList<>(map.entrySet());
//重写list.sort的comparator
list.sort(new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o1.getValue() - o2.getValue();
}
});
//使用lamda表达式
list.sort((o1, o2) -> o1.getValue() - o2.getValue());
//使用工具类Collections.sort(),并创建新的Comparator
Collections.sort(list, Comparator.comparingInt(Map.Entry::getValue));
对象List基于某个属性排序:
//与上面map排序类似,都可以使用工具类Collections.sort()或者list.sort(),然后通过不同Comparator来实现大小比较。
//使用list.sort(),并使用lamda表达式
list.sort((o1, o2) -> o1.getValue() - o2.getValue());
//使用工具类Collections.sort(),并创建新的Comparator
Collections.sort(list, Comparator.comparingInt(Object1::getValue));
堆排序java自带工具类:
//默认 - 小根堆:
PriorityQueue<Edge> pq = new PriorityQueue<Edge>(n);
//修改comparator - 大根堆:
PriorityQueue<Edge> pq = new PriorityQueue<Edge>(n, (x, y) -> x.cost - y.cost);
二分法重用取中间值:
//不用(L+R)/2的方式,避免int溢出,然后使用位运算代替除2
int mid = L + ((R - L) >> 1);
Math的一些工具方法:
Math.abs(int a):取绝对值。
Math.pow(double a, double b):取a的b次方,有个缺点是得到的是double类型的,如果是正数型的题目需要重新转成整数。
加减乘除的英文单词
add(加), subtract(减), multiply(乘),divide(除),
乘方(power)
平方(square),平方根(sqrt - square root)
负数(negative),正数(positive),绝对值(abs - absolute value)
char转int
int i = c - '0';
int i = c - 'a';
char判断是否是数字,string判断是否是数字
boolean b = Character.isDigit(i);
public boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
returnfalse;
}
return true;
}
浮点数如何转String并保留小数点后两位
1.使用String类的valueOf方法
2.使用DecimalFormat类进行格式化转换
DecimalFormat df = new DecimalFormat("#.00");
double num = 1234.5678;
System.out.println("转换后的字符串为:" + df.format(num));//输出1234.57
//这样可以显示千位分隔符,可以用于表示金额
DecimalFormat df = new DecimalFormat("#,###.00");