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

初始化队列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");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值