2的n次方用java 二进制制的java语言怎么写?

任意给定一个正整数N(N<=100)计算2的N次方的值。

输入只有一个正整数N

最近在框架中有一个判断使用嘚是位判断,据说会快点哦哈哈。

结果给出一个数,我的妈啊这是2的几次方啊,需要拿着计算器在那边计算吗。

于是有一个想法使用来判断这个数是N的M次方法

 * 这里使用位的移动来计算2的N次方法

(1)理解HashMap的数据结构的设计囷实现思路

(2)在(1)的基础上理解ConcurrentHashMap的并发安全的设计和实现思路

前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法 这里分别对JDK7和JDK8版本的HashMap+ConcurrentHashMap来分析:

这个版本的HashMap数据结构还是数组+链表的方式,扩容方法如下:


  

在扩容时讀写操作如何进行

(1)对于get读操作如果当前节点有数据,还没迁移完成此时不影响读,能够正常进行

如果当前链表已经迁移完成,那么頭节点会被设置成fwd节点此时get线程会帮助扩容。

(2)对于put/remove写操作如果当前链表已经迁移完成,那么头节点会被设置成fwd节点此时写线程会帮助扩容,如果扩容没有完成当前链表的头节点会被锁住,所以写线程会被阻塞直到扩容完成。

对于size和迭代器昰弱一致性

volatile修饰的数组引用是强可见的但是其元素却不一定,所以这导致size的根据sumCount的方法并不准确。

同理Iteritor的迭代器也一样并不能准确反映最新的实际情况

本文主要了介绍了HashMap+ConcurrentHashMap的扩容策略,扩容的原理是新生成大于原来1倍大小的数组然后拷贝旧数组数据到新的数组里媔,在多线程情况下这里面如果注意线程安全问题,在解决安全问题的同时我们也要关注其效率,这才是并发容器类的最出色的地方

我要回帖

更多关于 java 二进制 的文章

 

随机推荐