自记录-HashMap与Hashtable

对比
HashMapHashtable
所属包java.utiljava.util
继承AbstractMapDictionary
实现Map<K,V>, Cloneable, SerializableMap<K,V>, Cloneable, Serializable
底层结构

jdk1.7:数组+单向链表

jdk1.8:数组+单向链表+红黑树(

当链表节点数量达到树化阀值TREEIFY_THRESHOLD(阀值>8,并且数组长度>64)时,链表就会转化为红黑树;当红黑树的节点数量减少到UNTREEIFY_THRESHOLD <=6时,红黑树又会转化为单向链表

)具体区别下面附有单独区分

数组+链表
常用方法
HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put("","");
hashMap.putAll(new HashMap<>());
hashMap.get(0);
hashMap.containsKey("");
hashMap.entrySet();
hashMap.getOrDefault(0,"");
hashMap.remove("");
MapUtils.isNotEmpty(hashMap);
MapUtils.isEmpty(hashMap);
Hashtable<Object, Object> hashtable = new Hashtable<>();
hashtable.put("123","456");
hashtable.putAll(new HashMap<>());
hashtable.get(0);
hashtable.containsKey("");
hashtable.entrySet();
hashtable.getOrDefault(0,"");
hashtable.remove("");
MapUtils.isNotEmpty(hashtable);
MapUtils.isEmpty(hashtable);
Enumeration<Object> elements = hashtable.elements();
hashtable.contains("456");
hashtable.containsValue("");
key可为null       不可为null,会NullPointerException
value可为null不可为null,会NullPointerException
hash算法不同自定义的hash算法key的hash值
多线程线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,需要自己处理多线程的安全问题。
虽然是线程不安全的,但是它的效率远远高于Hashtable,这样设计是合理的,因为大部分的使用场景都是单线程。
线程安全的,它的每个方法上都有synchronized 关键字,因此可直接用于多线程中。当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。
ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。
初始容量 
DEFAULT_INITIAL_CAPACITY = 1 << 4
public Hashtable() {
    this(11-initialCapacity, 0.75f);
}
加载因子
DEFAULT_LOAD_FACTOR = 0.75f

public Hashtable() {

        this(11, 0.75f-loadFactor);

}

扩容大小2n2n+1

jdk1.7和1.8的hashmap

hashMap1.8做了哪些优化?_会飞的IT蜗牛的博客-CSDN博客_hashmap 1.8新特性红黑树与平衡二叉树_百图详解红黑树_小吴先森的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值