Java求余运算
2015-09-12 20:01
281 查看
Java求余运算
求余结果不一定能为整数。求余运算的真正过程为使用第一操作数除以第二个操作数,得到一个整数的结果后剩下的值就是余数。求余运算是两部操作,先除后减。举个例子:public class Main { public static void main(String[] args) { double a = 5.2; double b = 3.1; double ret = a % b; System.out.println(ret); // output: 2.1 } }
因为 5.2 = 3.1 * 1 + 2.1;
在刷OJ时,有时需要注意这个%,因为是两步的操作,如果时间卡的特别死而且数据十分的强的话一定要注意%的时间开销。
更加快速的取mod运算方法 —— 位与操作
笔者是通过阅读HashMap的底层实现源码学习到这种方法。HashMap确定entry在table数组的位置的方法就是把Key.hashCode()作为参数,重新利用自己的算法计算一遍hashCode,并将此hashCode同table.length-1进行%运算,通过余数确定entry的位置。巧就巧在利用了&运算。代码如下static int indexFor(int h, int length) { return h & (length-1); }
HashMap的size恒为2的次方大小。这里的h是HashMap自己算的hashcode。length传入table.length-1。由于table数组的length为2^n,通过几个样例计算发现此时做&运算时的效果正好等同于%,位运算的速度是很快的。所以,下次如果说需要取模而且数组长度为2^n时,可以首先考虑&运算。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统