昨天看了下JDK源码里面二分法查找的实现,对于一个地方甚是奇怪!
一般来说,想得到某个INT型变量除以2,假设是VAR,我只能想到的是VAR/2
然而我确看到的是VAR>>>1.象这样的写法,记得好像汇编,或者C++里面应该有不少这么的小技巧!
于是我对比了一下它们之间引起性能的差异,当数据在一万条左右,都是微乎其微的,但是当达到百万条时,差距就显现出来了!
这个让我思考,为什么会有差距呢?
难道除以2的底层实现不是>>>形式吗?
我可以推断,如果底层的除以2一定包括>>>这么一个步骤的,也就是说除以2这个方式是>>>的超集!
所以由此我得到了个简单的结论,除以2一定比>>>复杂许多.
那么这个地方用哪种方式比较好呢?显然是最后那种,如果性能是第一位的话.但是如果程序是第一位的话,还是选择通用的吧!
精确的需求加上简单的处理可以提高性能!
通用的需求加上抽象的处理,可以提高程序的可读性,可维护性!
如何选择?适合才是最好的原则!