Use these methods to save your life
LinkedHashMap
LinkedHashMap can be used as a LRU cache.
floorDiv and floorMod
floorDiv(num, k) will give the largest number (closest to +infinity) m, that makes m * k <= num.
floorDiv(4, 3) == 1, floorDiv(4, -3) == -2 (not -1).
floorMod(num, k) is a little bit tricky. floorDiv(num, k) * k + floorMod(num, k) = num.
获得List的最大最小值
Collections.max()和Collections.min()
String的split()
传入一个正则, 根据这个正则去split一个string. 一般在decode string的时候会用到.
String的indexOf()
知道string某个char出现的位置.
String的trime()
能帮助去括号或者其他的一些在首尾重复出现的字符.
Character.toString()
把char转成String.
Character.isDigit()
判断某个char是不是digit.
digit转对应的char, char转对应的digit
数字转对应的ascii字符比如65转对应65的char是A. 那就是(char) 65. 如果单个数字转对应数字字符比如6转成‘6’, 那就是6 + ‘0’. 字符转数字反过来即可.
StringBuilder
它既可以append 基本数据类型也可以append String.
String比较
String的比较使用equals而不是==.
TreeSet的用法
Add, remove, contains都是log(n), 因为是用红黑树implemented的. 红黑树就是self-balanced binary search tree. 美得很.
TreeMap的用法
floorEntry(K key), floorKey(K key)返回比给定的key小的keys中最大的那个key对应的entry或者Key.
Arrays.copyOfRange()
会创建新的array返回. 接受三个参数, 原array, 起始点from和终止点to. 包含from不包含to. From的范围是大于等于0小于等于array.length. 如果from == array.length或者from == to那么会返回一个空数组. To必须大于等于from, 如果to大于array.length, 那么新的array会被扩容. 扩充出去的元素会被赋值为0. 比如Arrays.copyOfRange(array, 2, array.length + 5). 那么就会从array中index为2的元素开始复制, 一直复制到最后一个index, 并且在尾部新添加5个0.
一直要给list添加哪些integer, 如果一行创建装有这些integers的list
假设我们要装1, 2, 3, 那么就是: new ArrayList<>(Arrays.asList(1, 2, 3))
Collections转array
比如ArrayList直接转array, 56题这个:mergedIntervals.toArray(new int[mergedIntervals.size()][]);
使用BigDecimal
记住如何使用BigDecimal
使用String的reverse, repeat
Repeat就是让一个string重复出现多少次构建出来的新string. 比如“U”.repeat(5), 就会构建一个有5个U的String.
computeIfAbsent
这个就是对于一个key, 如果有value就返回这个value, 如果没有那就需要传入一个参数, 这个参数就是key, 然后我们可以根据这个key来进行操作得出来一个value并把这个value作为key的value放到map中, 最后返回value. 这很适合比如我们想放入一个(Integer, list) pair进map中并且在这个list中要添加某个值. 于是就能直接map.computeIfAbsent(key, a -> new ArrayList<>()).add(target). 这里的lambda表达式到时候传入的参数就是key.