HashMap、LinkedHashMap、ConcurrentHashMap的使用

一、前言

    HashMap是我们平常开发中经常用到的,但是这几个map之间的区别有时候可能不是特别清楚,首先map是由key,value组成,可以快速的通过get(key)来获得value值,但是HashMap是无序的,ConcurrentHashMap也是无序的,但是是线程安全的,LinkedHashMap是根据put的先进先出规则进行排序的,

二、HashMap

1、代码如下:

        HashMap a = new HashMap();
        a.put("A","1111");
        a.put("H","2222");
        a.put("Z","3333");
        a.put("F","3333");
        a.put("E","3333");
//        Bundle bundle = new Bundle();
        for (Object entry : a.entrySet()) {
            System.out.println(entry);
        }

2、输出结果为:

A=1111
E=3333
F=3333
H=2222
Z=3333

从上可以看出Hashmap在push时是无序的,但是是线程不安全的,如果使用线程安全的,需要使用ConcurrentHashMap

ConcurrentHashMap的实现原理

JDK1.7 ConcurrentHashMap采用了数组+Segment+分段锁的方式实现

JDK1.8 ConcurrentHashMap采用了数组+链表+红黑树的实现方式来设计,内部大量采用CAS操作

三、LinkedHashMap

        LinkedHashMap a = new LinkedHashMap();
        a.put("A","1111");
        a.put("H","2222");
        a.put("Z","3333");
        a.put("F","3333");
        a.put("E","3333");
//        Bundle bundle = new Bundle();
        for (Object entry : a.entrySet()) {
            System.out.println(entry);
        }

输出结果为:

A=1111
H=2222
Z=3333
F=3333
E=3333

从以上结果可以看出,LinkedHashMap是按照先进先出原则进行排序的

其中如果想让LinkedHashMap变为线程安全的,可以使用Collections.synchronizedMap,也是采用synchronized方法上加锁,使用阻塞同步,效率低。

四、ConcurrentSkipListMap

ConcurrentSkipListMap需要指定字段进行排序,并不是先进先出的方式,但他是线程安全的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值