范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

并发ListSetConcurrentHashMap底层原理剖析

  ArrayList:
  List特点: 元素有放入顺序,元素可重复 。
  存储结构: 底层采用数组来实现的。
  源码: public class ArrayList extends AbstractList         implements List, RandomAccess, Cloneable, java.io.Serializable
  2、Cloneable
  支持拷贝:实现Cloneable接口,重写clone方法、方法内容默认调用父类的clone方法。
  2.1、浅拷贝
  基础类型的变量拷贝之后是独立的,不会随着源变量变动而变
  String类型拷贝之后也是独立的
  引用类型拷贝的是引用地址,拷贝前后的变量引用同一个堆中的对象
  public     Object     clone  ()   throws   CloneNotSupportedException {
  Study s   =   (Study)   super  .clone();
  return   s;
  }
  基本类型、引用类型。
  浅拷贝 基本类型(int类型)是独立的(改了值会生效),引用类型不独立的(同一份数据,string也是同样的)
  2.2、深拷贝
  变量的所有引用类型变量(除了String)都需要实现Cloneable(数组可以直接调用clone方法),clone方法中,引用类型需要各
  自调用clone,重新赋值
  public Object clone() throws CloneNotSupportedException {
  Study s = (Study) super.clone();
  s.setScore(this.score.clone());
  return s;
  }
  java的传参,基本类型和引用类型传参
  java在方法传递参数时,是将变量复制一份,然后传入方法体去执行。
  复制的是栈中的内容所以基本类型是复制的变量名和值,值变了不影响源变量
  引用类型复制的是变量名和值(引用地址),对象变了,会影响源变量(引用地址是一样的)
  String:是不可变对象,重新赋值时,会在常量表新生成字符串(如果已有,直接取他的引用地址),将新字符串的引用地址赋值给栈中的新变量,因此源变量不会受影响
  3、Serializable
  序列化:将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据,在Java中的这个Serializable接口其实是给jvm看的,通知jvm,我不对这个类做序列化了,你(jvm)帮我序列化就好了。如果我们没有自己声明一个serialVersionUID变量,接口会默认生成一个serialVersionUID,默认的serialVersinUID对于class的细节非常敏感,反序列化时可能会导致InvalidClassException这个异常(每次序列化都会重新计算该值)
  存盘 网络
  序列化 返序列化
  序列化 对象》二级制
  二进制 》对象 反序列化 校验 这个serivresionid
  4、AbstractList
  继承了AbstractList ,说明它是一个列表,拥有相应的增,删,查,改等功能。
  5、List
  为什么继承了 AbstractList 还需要 实现List 接口?
  1、在StackOverFlow 中:传送门 得票最高的答案的回答者说他问了当初写这段代码的 Josh Bloch,得知这就是一个写法错误。 I’ve asked Josh Bloch, and he informs me that it was a mistake. He used to think, long ago, that there was some value in it, but he since "saw the light". Clearly JDK maintainers haven’t considered this to be worth backing out later.
  基本属性:
  private static final long serialVersionUID = 8683452581122892189L;//序列化版本号(类文件签名),如果不写会默认生成,类内容的改变会影响签名变化,导致反序列化失败
  private static final int DEFAULT_CAPACITY = 10;
  //如果实例化时未指定容量,则在初次添加元素时会进行扩容使用此容量作为数组长度
  //static修饰,所有的未指定容量的实例(也未添加元素)共享此数组,两个空的数组有什么区别呢? 就是第一次添加元素时知道该 elementData 从空的构造函数还是有参构造函数被初始化的。以便确认如何扩容。空的构造器则初始化为10,有参构造器则按照扩容因子扩容
  private static final Object[] EMPTY_ELEMENTDATA = {};
  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
  transient Object[] elementData;
  // arrayList真正存放元素的地方,长度大于等于size//无参构造器,构造一个容量大小为 10 的空的 list 集合,但构造函数只是给 elementData 赋值了一个空的数组,其实是在第一次添加元素时容量扩大至 10 的。 public ArrayList() {             this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;         } //当使用无参构造函数时是把 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 赋值给 elementData。 当 initialCapacity 为零时则是把 EMPTY_ELEMENTDATA 赋值给 elementData。 当 initialCapacity 大于零时初始化一个大小为 initialCapacity 的 object 数组并赋值给 elementData。 public ArrayList(int initialCapacity) {             if (initialCapacity > 0) {                 this.elementData = new Object[initialCapacity];             } else if (initialCapacity == 0) {                 this.elementData = EMPTY_ELEMENTDATA;             } else {                 throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);             }         } //将 Collection 转化为数组,数组长度赋值给 size。 如果 size 不为零,则判断 elementData 的 class 类型是否为 ArrayList,不是的话则做一次转换。 如果 size 为零,则把 EMPTY_ELEMENTDATA 赋值给 elementData,相当于new ArrayList(0)。 public ArrayList(Collection<? extends E> c) {             Object[] a = c.toArray();             if ((size = a.length) != 0) {                 if (c.getClass() == ArrayList.class) {                     elementData = a;                 } else {                     elementData = Arrays.copyOf(a, size, Object[].class);                 }             } else {                 // 指向空数组                 elementData = EMPTY_ELEMENTDATA;             }
  LinkedList:
  存储结构: 底层采用链表来实现的。
  HashSet(Set):
  特点:
  元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
  存储结构:
  底层采用HashMap来实现
  原理讲解:
  源码分析:
  HashMap(Map):
  特点:
  key,value存储,key可以为null,同样的key会被覆盖掉
  存储结构:
  底层采用数组、链表、红黑树来实现的。
  原理讲解:
  哈希算法(也叫散列),就是把任意长度值(Key)通过散列算法变换成固定长度的key(地址)通过这个地址进行访问的数据结构它通过把关键码值映射到表中一个。位置来访问记录,以加快查找的速度。
  Hashcode:通过字符串算出它的ascii码,进行mod(取模),算出哈希表中的下标
  哈希冲突
  用链表是来解决数组下标会覆盖的问题,冲突的问题。为什么hashmap 用两个数据结构。两个数据结构。JDK8 红黑树???
  因为链表查询的时候链表过长了查询效率非常低,所以需要用红黑树
  ConcurrentHashMap(并发安全map):
  特点:
  并发安全的HashMap ,比Hashtable效率更高
  存储结构:
  底层采用数组、链表、红黑树 内部大量采用CAS操作。并发控制使 synchronized 和 CAS 来操作来实现的。
  原理讲解:
  源码分析:
  初始化方法:
  java.util.concurrent.ConcurrentHashMap#initTable
  是在put方法进行的
  transient volatile Node[] table;

靳东李易峰吴昕都爱的高颜值水杯!防漏便携全身可拆好清洗夏日酷暑水分流失快,不管是带孩子出去玩,还是咱们自己上下班,一定要记得及时的补充水分,否则身体就会吃不消。水是生命之源,不光喝水需要重视,盛水的杯子更加重要!轻便好看的塑料运动水杯几十块就能拥有全新小白鞋?原来是宜家HM小白鞋神器秒增白作为鞋柜中的镇柜之宝,小白鞋说第二,没人敢说第一。不管是奢侈品牌GUCCI巴宝莉,或是平民品牌匡威安踏,还有国牌回力,每一季的新品总有小白鞋的一席之地时髦精虞书欣也对小白鞋宠爱有加用时变大,不用时缩小的魔法卷轴杯,2m高空摔不烂,安心喝8杯水最近的天气持续升温,出汗多,不管是带孩子出去玩,还是自己上下班,一定要记得及时的补充水分,否则身体就会吃不消。水对人体的健康非常重要,每日饮水应在68杯,大约是12001600ml橡皮屑太烦人?白菜价迷你吸尘器,超轻迷你吸力强,让桌面更整洁生活中的各种渣渣实在太烦人了,比起大件大件的垃圾,这些无孔不入的小碎屑是最烦人的。比起大件大件的垃圾,无孔不入的小碎屑是最烦人的。不小心掉到键盘缝隙的零食碎,抠半天都抠不出来。平时腿粗屁股大不敢穿短裤?不存在的!这条爆火的花苞裤遮肉显瘦出门2分钟,流汗5小时!一到了热到爆炸的夏天,着装用不着多想,清凉舒服显瘦就够了!本着这一原则,你首先想到的单品是什么?反正小编我想到的是短裤,夏天必须露腿啊短裤安全百搭,自然得到办公午睡最佳拍档终于找到了!自带主动降噪蓝牙耳机的我们一周中呆得最久的地方,就是办公室了。朝九晚六8小时外,还有不定期的加班,往往在电脑桌前一坐就是大半天,在加上现在进入夏日,昼长夜短,更是需要良好的午休来补充体力和精力。但是想在Axure原型全集434套元件部分5013最全的Web设计Axure元件库5012数据图表Axure元件库5011移动端设计Axure元件库5010IPad设计Axure元件库5009最实用的Axure元件热巴泫雅美人出浴真是绝美!选对沐浴露,滋润还自带体香什么样的女人最诱惑?光滑白皙的肌肤,半遮半掩间欲迎还拒,一旦和荡漾水波结合在一起,不经意间将美人的妩媚表现得淋漓尽致。看着美,女人最诱惑时刻举手投足间的美丽。闻着香,走过的余留香气Axure原型及元件库全集(8)AxureRP原型整理资料全集,包括AxureRP原型400多个,元件库13个。PM产品经理Axure元件及原型地图51宠物类0120宠物移动端AxureRP原型52影院类0121全球首款移动机器人路萌,它会跟着你跑,还能帮你拎包,太萌了每个人心中都有一个机器人梦,幻想着像电影或小说男主一样,拥有一个形影不离的好机友。环太平洋里的机甲猎人但说实话,现在那些摆件类或者生产类的机器人真的不是我们心目中的好机友啊!!!以中国危废网后台AxureRP原型编号0212中国危废网后台AxureRP原型版权说明本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌疑,请及时告知进
北汽蓝谷(华为自动驾驶)将成为科技股龙头北汽蓝谷的2020年度审计报告的一则完成定向增发审计工作的报告将北汽蓝谷未及时披露定向增发进展的神操作推向风口浪尖!自从华为官宣北汽极狐是华为自动驾驶子品牌后,北汽蓝谷股价飙升60比台积电更快!美科技巨头全球首发2nm芯片,手机有望4天一充电?众所周知,台积电是全球芯片产业不可缺少的巨头,张忠谋甚至将台积电称为可以左右全球科技发展的重要一极。台积电之所以有这么重要的地位,主要在于其掌握着全球最先进的芯片制造技术。最近10猫扑关闭发帖后多日才引发讨论近日,作为一代人青春回忆的知名网络社区猫扑发布公告称,为了防止垃圾信息泛滥,已于2021年4月20日起正式关闭发帖功能。4月底有媒体报道了该消息后,猫扑的前世今生才在网上引起了讨论美媒盖茨夫妇2019年已酝酿离婚,爱泼斯坦或为原因之一华尔街日报5月9日消息,梅琳达盖茨早在一年多前就开始同律师讨论离婚事宜,部分原因可能与比尔盖茨美国金融大鳄爱泼斯坦(JeffreyEpstein)往来有关。该报道引述多份文件和知情狗狗币暴涨12000马斯克疯狂带货,创始人对投机失望本文来源时代周报作者马欢狗狗币教父(Dogefather)马斯克又发声了,但狗狗币随后暴跌。北京时间5月9日中午11点半,马斯克主持的首档综艺节目周六夜现场(SaturdayNig同样是旗舰机!中兴Axon30Pro上手评测中兴在今年的AXON系列新品中采用双旗舰策略,虽然没有众所期待的第二代屏下摄像技术,不过两款机型都采用了骁龙888处理芯片高刷显示屏及多摄组合的搭配,综合性能表现可圈可点。此次评测山东人5G进万家系列活动来了!套餐再降10元以上!买手机有补贴大众报业经济导报20210510100233经济导报记者吴淑娟经济导报记者从山东省工信厅获悉,为加快提升全省5G用户普及率,自5月中旬至6月下旬,将充分利用517国际电信日618年刚买的手机就过时了?华为三星等强强联手,新标准5G手机更省电5G手机相对较高的功耗使得手机的续航迎来了巨大挑战,手机厂商为了保证手机的较好的续航水平,不得不加大手机电池,这就使得5G手机的机身比较厚重。这一现状或许有望得到改善!新一代5G芯120W100倍变焦屏下结构光,这手机才是真全面屏戳我谈起全面屏,你还记得最开始的全面屏手机是什么样的吗?这个概念由小米MIX带火,雷军也没想到,这款秀肌肉的概念机竟成了改变手机屏幕趋势的重要一环。那时候,人们对全面屏的概念,是手上半年还剩这些手机未发布,你最期待哪一款?转眼间,2021年即将过半,上半年的机圈可谓热闹非凡,前有小米11等一众骁龙888高端旗舰,后有realmeRedmi等一系列天玑新旗舰机型与骁龙870机型在2000元档厮杀。仍然4月份比亚迪销量超4万辆同比增42。2环比增10。8近日,比亚迪汽车公布了4月份产销快报,数据显示4月份生产45511辆,同比去年31426辆增长44。84月份销量45234辆,同比去年销量31809辆增长42。2,环比3月份408