算法手写代码常用到的工具类&方法

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类型的,如果是正数型的题目需要重新转成整数。

你可能感兴趣的:(算法,Java面试,算法,windows)