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改小.
扩容特别耗性能,初始化给一个大致的数字,避免频繁扩容