Java修炼之路——基础篇——Java集合类详解1

SynchronizedList和Vector的区别
java.util.Vector java.util.Collections.$SynchronizedList
Vector用同步方法,SynchronizedList用同步代码块,SynchronizedList可以指定锁定的对象
SynchronizedList有很好的扩展和兼容功能,能把所有List的子类都转为线程安全的类
使用SynchronizedList进行遍历时,需要手动进行同步处理

HashMap、HashTable、ConcurrentHashMap区别
HashTable

  1. 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低
  2. 初始size为11,扩容:newsize = olesize*2+1
  3. 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length
  4. 默认负载极限 = HashMap = 0.75
    HashMap
  5. 底层数组+链表+红黑树(jdk1.8)实现,key value都可为null,线程不安全
  6. 初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂
  7. 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入
  8. 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)
  9. 计算index方法:index = hash & (tab.length – 1)
    ConcurrentHashMap
  10. 底层采用分段的数组+链表+红黑树(jdk1.8)实现,线程安全
  11. 通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)
  12. Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术
  13. 有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁
  14. 扩容:段内扩容(段内元素超过该段对应Entry数组长度的75%触发扩容,不会对整个Map进行扩容),插入前检测需不需要扩容,有效避免无效扩容

CopyOnWriteArrayList、ConcurrentSkipListMap

1:CopyOnWriteArrayList:
迭代通过拷贝集合元素达成fail-safe;
元素的增删改通过ReentrantLock来实现;

2:ConcurrentSkipListMap:
ConcurrentSkipListMap提供了一种线程安全的并发访问的排序映射表。内部是SkipList(跳表)结构实现,在理论上能够O(log(n))时间内完成查找、插入、删除操作。
详见:https://blog.csdn.net/sunxianghuang/article/details/52221913

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小卓.NET中文编程特点介绍

大家好,我在介绍一下我的全新编程语言-卓语言。小卓编程是卓语言的一个开发工具,可以在里面实现绘图、动画、事件响应等等功能。关于中文编程,一直以来都有争议。我针对以往中文编程的缺点而开发了一种全新的编程语言。首先 &…

P5748 集合划分计数(贝尔数/多项式)

P5748 集合划分计数 求解从1到1e5的所有贝尔数,我们可以利用生成函数求解,就是利用指数型生成函数求解 代码细节: 首先虽然exe^xex代表全是1,但是多项式下面还有阶乘逆元的系数,然后乘完之后,我们还有乘…

2019-02-28-算法-进化(盛最多水的容器)

题目描述 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以…

CAP 2.6 版本发布通告

前言今天,我们很高兴宣布 CAP 发布 2.6 版本正式版。同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star.自从上次 CAP 2.5 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也…

皮克定理(题目)

Area 皮克定理:皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为Sab2-1,其中a表示多边形内部的点数,b表示多边形落在格点边界上的点数,S表示多边形的面积。 /*Author : lifehap…

随机算法

概率论基础知识 期望的线性性 马尔可夫不等式 条件概率 独立事件 独立随机变量 随机算法 Las Vegas型随机算法 随机快速排序 随机选择 随机n皇后放置 将确定性算法的某一步修改为随机选择,有可能可以优化算法平均时间下的算法复杂度。 Monte Carlo型算法 主元…

求助:现在有一个可以进体制“养老”的坑,我该不该跳?

对不起,在当下互联网人生活的环境中,并没有可以“养老”的坑。对不起,在当下互联网人生活的环境中,也没有绝对”稳定“的企业。技术人的职业发展,以”适者生存“为核心原则,每一种职业环境都有相应的职业成…

Java修炼之路——基础篇——Java集合类详解2

Set和List区别?Set如何保证元素不重复? Set、List都实现了Collection接口,List是有序的列表,Set是无序的集合(TreeSet有序) List实现类: ArrayList :基于数组,可动态扩…

Legacy(线段树优化建边跑Dijkstra)

Legacy 线段树优化建边,开两颗线段树: 对于线段树1,自顶向下连边。对于线段树2,自底向上连边。 然后对于op1我们直接连边即可。 对于op2(u -> [l, r] cost w),这个操作在线段树1上完成即可…

P5273 【模板】多项式幂函数 (加强版)

P5273 【模板】多项式幂函数 (加强版) 这道题和原来的题目唯一区别就在于这道题没有限制F[0]1,所以我们就不能直接取ln了,但是我们实际上有办法转换一下,让它最低次项为1,只需要除以最后一个非0项即可,然后最后再乘回…

给 asp.net core 写个中间件来记录接口耗时

给 asp.net core 写个中间件来记录接口耗时Intro写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再说接口慢的时候看一下接口耗时统计&#x…

2019-03-1-算法-进化(整数转罗马数字)

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

brz的函数(mobius)

brz的函数 ∑i1n∑j1nμ(ij)假设i,j不互质,一定有μ(ij)0所以上式∑i1n∑j1nμ(ij)[gcd(i,j)1]积性函数性质有μ(ij)μ(i)μ(j)∑i1n∑j1nμ(i)μ(j)[gcd(i,j)1]∑i1n∑j1nμ(i)μ(j)∑d∣gcd(i,j)μ(d)这里我们按照套路把d给提前去,因为i,j都要是d的倍数…

CF1251F Red-White Fence(多项式/背包问题/组合数学)

CF1251F Red-White Fence 现在给出了n个白板,m个红板,然后将其按照题目要求放成一排,要求最终周长为qi的方案数。 首先因为有高度的单调性,所以我们可以直接把周长转化为红板的高度和白板的数量,然后因为红板数量很少…

Java修炼之路——基础篇——枚举

枚举的用法 每个枚举变量其实都是枚举类的一个实例。 枚举与单例 各种模式的单例模式,包括枚举实现的单例 //懒汉模式 class SingletonA {private static SingletonA instance new SingletonA();//保证不能通过new SingletonB的方式创建对象private SingletonA()…

Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

一、前言【查看完整视频教程(免费),请拉直文尾】在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中,我们将继续介绍利用Docker部署Nginx服务实现负载均衡。文章最后…

HDU 6127 Hard challenge(极角 + 二分)

Hard challenge 思路 通过极角排序,这里通过修改后,所有点的角度在[0,2π)[0, 2 \pi)[0,2π)之间, 然后O(n)O(n)O(n)扫一趟,对当前在的级角加上π\piπ就是我们要找的角度了,这里通过二分来实现查找。 接下来就只要…

P2664 树上游戏(点分治/计数题计算贡献/树上差分)

P2664 树上游戏 对于树上n个点,每个点有不同颜色,求解每个点到其他点的路径上不同颜色个数之和。 首先看到这种树上点对问题,我们可以想到点分治,然后考虑每次分治如何求解答案,本质上就是一个数颜色的问题&#xff…

2019-03-4-算法-进化(罗马数字转整数)

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如…

设置ABP默认使用中文

ABP提供的启动模板, 默认使用是英文:虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.前期准备使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:abp new AbpStudy关于MVC的启动模板可以看文档, 这里就不赘述.使用ABP版本的是当前最新…