ConcurrentHashMap
Hash
散列,哈希:把任意长度的输入通过一种算法(散列),变换成为固定长度的输出,这个输出值就是散列值。属于压缩映射,容易产生哈希冲突。Hash算法有直接取余法等。
产生哈希冲突时解决办法:开放寻址;2、再散列;3、链地址法(相同hash值的元素用链表串起来)。
ConcurrentHashMap在发生hash冲突时采用了链地址法。
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable {
可以理解为线程安全的HashMap,新增几个方法
putIfAbsent:如果已经存在值则返回,否则插入新的键值对
通过位运算得到的数据结果往往比直接的加减乘除等得到的结果快的多,节约内存开销和加快计算效率,jdk里面很多地方都是使用位运算进行存储和判断数据的属性状态
类似于ConcurrentHashMap的这段源码
private static final int tableSizeFor(int c) {
int n = c - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
举个关于增删改查的权限的栗子