当前位置: 首页 > news >正文

泉州建站服务中国建设银行官方网站

泉州建站服务,中国建设银行官方网站,可以网上做单的网站,鹏鸿生态板官方网站开发区代理Java中的map是一个很重要的集合#xff0c;他是一个接口#xff0c;下面继承它实现了多个实现类#xff0c;这些类各有千秋#xff0c;各自有个各自的优点和缺点 如下图 map的主要特点是键值对的形式#xff0c;一一对应#xff0c;且一个key只对应1个value。其常用的map… Java中的map是一个很重要的集合他是一个接口下面继承它实现了多个实现类这些类各有千秋各自有个各自的优点和缺点 如下图 map的主要特点是键值对的形式一一对应且一个key只对应1个value。其常用的map实现类主要有HashMap、HashTable、TreeMap、ConcurrentHashMap、LinkedHashMap、weakHashMap等等。 1、HashMap 使用位桶和链表实现最近的jdk1.8改用红黑树存储而非链表它是线程不安全的Map方法上都没有synchronize关键字修饰 最常用的Map根据键的hashcode值来存储数据根据键可以直接获得他的值因为相同的键hashcode值相同在地址为hashcode值的地方存储的就是值所以根据键可以直接获得值具有很快的访问速度遍历时取得数据的顺序完全是随机的HashMap最多只允许一条记录的键为null允许多条记录的值为nullHashMap不支持线程同步即任意时刻可以有多个线程同时写HashMap这样对导致数据不一致如果需要同步可以使用synchronziedMap的方法使得HashMap具有同步的能力或者使用concurrentHashMap 2、HashTable HashTable是线程安全的一个map实现类它实现线程安全的方法是在各个方法上添加了synchronize关键字。但是现在已经不再推荐使用HashTable了因为现在有了ConcurrentHashMap这个专门用于多线程场景下的map实现类其大大优化了多线程下的性能。 3、ConcurrentHashMap 如果你经常参加面试一定会被问到这个map实现类这个map实现类是在jdk1.5中加入的其在jdk1.6/1.7中的主要实现原理是segment段锁它不再使用和HashTable一样的synchronize一样的关键字对整个方法进行枷锁而是转而利用segment段落锁来对其进行加锁以保证Map的多线程安全。 其实可以理解为一个ConcurrentHashMap是由多个HashTable组成所以它允许获取不用段锁的线程同时持有该资源segment有多少个理论上就可以同时有多少个线程来持有它这个资源。 其默认的segment是一个数组默认长度为16。也就是说理论商可以提高16倍的性能。 但是要注意咯在JAVA的jdk1.8中则对ConcurrentHashMap又再次进行了大的修改取消了segment段锁字段采用了CASSynchronize技术来保障线程安全。底层采用数组链表红黑树的存储结构也就是和HashMap一样。这里注意Node其实就是保存一个键值对的最基本的对象。其中Value和next都是使用的volatile关键字进行了修饰以确保线程安全 在插入元素时会首先进行CAS判定如果OK就插入其中并将size1但是如果失败了就会通过自旋锁自旋后再次尝试插入直到成功。 所谓的CAS也就是compare And Swap即在更改前先对内存中的变量值和你指定的那个变量值进行比较如果相同这说明在这期间没有被修改过则可以进行修改而如果不一样了则就要停止修改否则就会覆盖掉其他的参数。即内存值a旧值b和要修改的值c如果这里ab那么就可以进行更新就可以将内存值a修改成c。否则就要终止该更新操作。 为什么这里会用volatile进行修饰我在其他博客找到了答案。主要有两个用处 1、令这个被修饰的变量的更新具有可见性一旦该变量遭到了修改其他线程立马就会知道立马放弃自己在自己工作内存中持有的该变量值转而重新去主内存中获取到最新的该变量值。 2、产生了内存屏障这里volatile可以保证CPU在执行代码时保证所有被volatile中被修饰的之前的一定在之前被执行也就是所谓的“指令重排序”。 同hashMap一样在JDK1.8中如果链表中存储的Entry超过了8个则就会自动转换链表为红黑树提高查询效率。 4、TreeMap TreeMap也是一个很常用的map实现类因为他具有一个很大的特点就是会对Key进行排序使用了TreeMap存储键值对再使用iterator进行输出时会发现其默认采用key由小到大的顺序输出键值对如果想要按照其他的方式来排序需要重写也就是override 它的compartor接口 另外TreeMap底层的存储结构也是一颗红黑树。是不是发现好多都是红黑树没错因为红黑树查找效率高只有Olgn。它是一种自平衡的二叉查找树。在每次插入和删除节点时都可以自动调节树结构以保证树的高度是lgn。 5、LinkedHashMap 是HahsMap的一个子类但它保持了记录的插入顺序遍历时先得到的肯定是先插入的也可以在构造时带参数按照应用次数排序在遍历时会比HahsMap慢不过有个例外当HashMap的容量很大实际数据少时遍历起来会比LinkedHashMap慢因为它是链啊因为HashMap的遍历速度和它容量有关LinkedHashMap遍历速度只与数据多少有关 LinkedHashMap它的特点主要在于linked带有这个字眼的就表示底层用的是链表来进行的存储。相对于其他的无序的map实现类还有像TreeMap这样的排序类linkedHashMap最大的特点在于有序但是它的有序主要体现在先进先出FIFIO上。没错LinkedHashMap主要依靠双向链表和hash表来实现的。 仔细看这里虽然在计算hashcode时还是发生了hash冲突采用了链地址法解决了冲突但是这里的Entry对象是采用双向链表保存的每个Entry都有一个after和before的属性。当插入一个entry时如果发生了冲突就可以将新的Entry插入Entry链表中的头部但是按照双向链表的角度来说又会将该Entry插入到双向链表的尾部。 6、weakHashMap 首先weakHashMap它是一个“弱键”它的Key值和Value都可以是null而且其Map中如果这个Key值指向的对象没被使用此时触发了GC该对象就会被回收掉的。其原理主要是使用的WeakReference和ReferenceQueue实现的其key就是weakReference而ReferenceQueue中保存了被回收的 Key-Value。 如果当其中一个Key-Value不再使用被回收时就将其加入ReferenceQueue队列中。当下次再次调用该WeakHashMap时就会去更新该map,比如ReferenceQueue中的key-value将其中包含的key-value全部删除掉。这就是所谓的“自动删除”。
http://www.sadfv.cn/news/200462/

相关文章:

  • 石家庄做网站好的公司推荐中国安能建设集团有限公司网站
  • 做海外生意的网站平面设计都学什么
  • 合肥做英文网站网站新闻页面无法翻页
  • 佛山企业网站建设电话网站开发硬件要求
  • 永久建站空间购买网站建设企业 熊账号
  • 晋中做网站做英文小说网站
  • 网站能不能自己做优秀的网站有哪些内容
  • discuz视频网站模板玩具网站模板
  • 金桥网站建设苏州seo排名公司
  • 网站定制开发特点安徽建设工程造价信息网站
  • 奉贤宜昌网站建设自助打印微信小程序免费制作平台
  • 毕业设计微信小程序开发企业免费网站优化服务
  • 高端网站建设套餐建设网站的价格表
  • 贵州城乡住房建设部网站国外企业网站怎么做
  • 98元建网站企业注册地址变更流程
  • 优质网站建设是哪家网站开发与系统开发
  • 网站建设防火墙级别要求潍坊网站建设网超
  • 中国建设银行官网站账户商品加盟网页制作
  • 微信制作网站开发粉色的网站
  • 网站模板 商标医药代理网
  • 制作商城网站模板在哪个网站上做简历
  • 佛山营销型网站建设深圳公共资源交易平台
  • 遵义市住房城乡建设局网站龙口网站建设
  • 网站升级改版方案市场调研报告范文大全
  • 网站建设及推广好学习吗织梦cms 获得网站流量次数
  • 大理石在哪些网站做宣传网站登不上去的原因
  • 临海市建设局官网站前端网站优化
  • 培训网站建设方案成都信用建设网站
  • 设计的网站怎么添加域名电商推广计划
  • 美业o2o平台有哪些wordpress 国内 优化