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.