天天看点

java小实现map家族

hashtable线程安全的遗留类不允许null

非线程安全用hashmap(允许1个键为null)以hashcode值存储数据读取速度很快无序,线程安全用concurrenthashmap或collections的synchronizedmap方法让hashmap安全

linkedhashmap是hashmap的子类,用iterator遍历先插线得

treemap实现sortmap接口按键升序排列,键必须实现comparable接口,否则抛类型异常

以上的key值要求不能变化,否则不能映射到值

存储结构是数组+链表(链条过长降低性能,于是jdk.18链表大于8转为红黑树)2个key定位到相同的位置发生hash碰撞

算法越分散均匀,nodehash桶数组越大越分散,碰撞率越小

桶越大空间越大,考虑空间和时间的平衡则出现好的hash算法和扩容机制

node[] table个数为length  x  factor(负载因子)    超过个数则  resize扩容

扩容后为原来的2倍 factor默认0.75  可以修改  可以>1  空间多要求时间效率则factor改小.

扩容特别耗性能,初始化给一个大致的数字,避免频繁扩容