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

网站建设选题中小企业库

网站建设选题,中小企业库,灯饰网站建设,手机app软件开发ArrayList深入源码一、ArrayList源码解析1. MIXIN 的混入2. 属性说明3. 构造方法4. 其他方法#xff08;核心#xff09;iterator 和 listIterator 方法add方法remove 方法sort方法其他二、ArrayList 为什么是线程不安全的#xff1f;体现哪些方面呢#xff1f;三、ArrayLi… ArrayList深入源码一、ArrayList源码解析1. MIXIN 的混入2. 属性说明3. 构造方法4. 其他方法核心iterator 和 listIterator 方法add方法remove 方法sort方法其他二、ArrayList 为什么是线程不安全的体现哪些方面呢三、ArrayList 细节汇总前言 个人觉得看源代码会增进不少知识一直都是看别人写的博客中的代码片段没自己静下心来去看过接下来体验体验源码的快乐。 一、ArrayList源码解析 对 ArrayList 相应关系有了大致的了解后咱由外到里依次深入。 1. MIXIN 的混入 ArrayList 利用 MIXIN 的思想实现了多继承。 说明其实现的接口 Serializable接口使得ArrayList 支持序列化和反序列化。RandomAccess接口该接口是一个标记接口意在标明ArrayList 具备快速随机访问的能力使用for 会比使用 迭代器iterator访问速度要快。LinkedList 那边即不具备这种能力所以不存在这种标记原因是因为LinkedList 底层是链表访问都是从根到尾的所以它使用迭代器会更快。Cloneable接口也是一个标记接口实现了它便可以去重写Object 下的clone 方法利于对象进行创建副本。注意是ArrayList 实现了Cloneable接口当利用多态向上转型为List 时是不可以使用的。 下面是 ArrayList 内部重写的 clone 方法的代码。 /*** Returns a shallow copy of this {code ArrayList} instance. (The* elements themselves are not copied.)** return a clone of this {code ArrayList} instance*/public Object clone() {try {ArrayList? v (ArrayList?) super.clone();v.elementData Arrays.copyOf(elementData, size);v.modCount 0;return v;} catch (CloneNotSupportedException e) {// this shouldnt happen, since we are Cloneablethrow new InternalError(e);}}emmmm…这里我不知道返回值的数据类型不直接为 ArrayList一般我去重写的话就会直接。。。 2. 属性说明 3. 构造方法 ArrayList 有三个构造方法俩有参一无参的。 第三个描述的那个构造方法如何使用呢 由于Arrays.asList() 得到的集合固定大小的是由Arrays内部类所实例化的是没有 clone(),add(),remove(),clear()等这样的动态操作的但如果想要使用这种动态操作怎么办呢 那咱就可以利用这个构造方法看代码更清晰 String[] s {xx,yy};//ListString xxx Arrays.asList(s);//xxx.add(mm); /*这里运行最后是会报异常的这是因为Arrays 里面有个ArrayList 的内部类它没有重写add和remove等方法。但没运行是不会爆红的虽然没有重写那些方法但该内部类继承了AbstractList这个类里面这些方法不是抽象的...*/ListString list new ArrayList(Arrays.asList(s));list.add(mm);list.forEach(System.out::println);// 正常输出4. 其他方法核心 先不说方法先说说类里面实现的Iterator接口和它的子接口ListIterator接口。虽然ArrayList 实例对象用迭代器的话比较少但是量变质不变LinkedList 可以用啊。 iterator 和 listIterator 方法 看看Iterator 接口的实现类 Itr 内部吧 再来看看 ListIterator 接口实现类 ListItr继承了Itr 的内部吧 这里继承所以forEachRemaining方法也是可以使用的。 有了 listIterator() 不会还有人用 iterator() 吧。注意ListIterator 只在List 集合中出现了哦也就是 Vector、ArrayList、LinkedList、Stack这样的。 也可以看看 JAVA中ListIterator和Iterator详解与辨析 这篇博客对其的一些解释。 add方法 add 对外提供的方法有俩add(E e)和add(int index, E e)。它俩有公共的点是判断类内定义的elementData数组长度是否和元素size个数相匹配是否需要扩容。 也就是说它们俩有一个共同的方法让elementData扩容。咋括滴勒咱来看看这个grow方法内部。 咱看别人博客都说是1.5倍扩容的但是是怎么个扩容呢下面看源码分析分析。 通过调用 ArraysSupport类中的newLength方法我们获得newCapacity后通过Arrays.copyOf完成扩容。 先来看看ArraysSupport类中的newLength方法。1.5倍的由来 再来看看Arrays.copyOf方法调用吧 它内部用的是System.arraycopy这个方法。这是核心啊我觉得这也是ArrayList 性能要比较好的关键。这玩意将数据复制给一个副本然后返回给elementData数组。arraycopy 是本地native方法。它强在它是浅拷贝它是直接拷贝所存放的地址而不是像深拷贝那样重新分配内存。 有关浅拷贝和深拷贝可以看看这篇《浅拷贝和深拷贝》或者我写的这篇《clone方法》。 了解完如何扩容之后再来看看俩方法的具体实现 add(E e) add(int index,E e) remove 方法 remove 方法也有两种对外提供remove(int index)remove(Object obj)。 它们都是根据索引去调用内部的 fastRemove(Object[] es, int i)方法去进行移除。也是调用System下面的arraycopy方法然后把那个设置为空null让GC回收。 咱先来看看 fastRemove 方法的实现吧 remove(int index) remove(Object obj) 有关 mark 标记的使用可以看这篇博客《mark标号》。 从代码可以看出不管传入的参数是空还是非空都会对 elementData 进行操作进行删除。 sort方法 从jdk1.8 后List接口就引入了sort 这个默认方法。 List 中的 sort 方法 ArrayLIst 重写的 sort 方法重写的原因很简单ArrayList内部本就是动态数组所构的用迭代器去重写对元素进行设置纯属是多余 及其舒适简单。 可以直接用LIst集合中的sort了其实调用Collections 工具类中的sort 方法最后还是会回到List 集合中还不如直接使用呢。 其他 还有一些常用的 方法比如 set(int index,E element)isEmpty()get(int index)indexOf(Object)lastIndexOf(Object)clear()toArray()contains()trimToSize() 还是通过Arrays.copyOf 将数组长度变成和数组元素个数size一致可以减少空间的损失。… 理解了 ArrayList 的本质这些方法的实现其实自己想也想的出来。 二、ArrayList 为什么是线程不安全的体现哪些方面呢 可以看看这篇博客写的几点线程不安全的情况以及其测试。 《ArrayList为什么线程不安全 线程不安全体现在哪些方面 源码角度分析其具体原因》 三、ArrayList 细节汇总 ArrayList 是基于动态数组实现的当进行插入或删除操作的时候都会进行数组的拷贝复制。ArrayList 它很多地方是分步进行操作的**而且内部元素也是可以为 null 的。**它不是线程安全的。ArrayList 删除元素时只会改变元素的个数size而不会改变容量elementData.length如果想要更改可以调用trimToSize()方法它会给你改成和元素个数一样的值。
http://www.hkea.cn/news/14383687/

相关文章:

  • 网站开发技术指标4399任天堂
  • 营销型网站建设首选网站开发的技术要求
  • 广州市营销型网站建设wordpress开发单页面
  • 企业顺德网站建设网站开发文本
  • 同心食品厂网站建设项目任务分解网站字体大小是多少合适
  • 北京中邦亚通网站wordpress访客
  • 鹤壁网站制作域名查询网
  • 做网站apache如何下载中心软件
  • 安徽网站建阿里云支持wordpress
  • 中国十大网站公司排名北京东直门+网站建设
  • 怎么开通网站和进行网页设计flash网站欣赏
  • 网站开发语言有php苏宁易购网站建设目标
  • 网站布局优化怎么做wordpress上传设置
  • dedecms wap网站模板建设网站行业云
  • 快速建站微信小程序个人可以做吗
  • 个人网站设计作业石家庄网站网站建设
  • 网站建设 東道网络手机下载app安装
  • 吉首网站建设wordpress没有样式表
  • 牡丹江商城网站建设深圳建设管理中心网站首页
  • 龙陵网站建设wordpress jquery版本号
  • 网站开发书网站建设思路设计
  • 做网站域名备案需要多久网站流量分析的指标有哪些
  • 建设银行北海分行网站如何做电商产品推广
  • 布料市场做哪个网站好威联通怎么建设网站
  • 网页上传和网站开发旧房改造室内装修设计公司
  • 网站建设的经验之谈个人网页设计师
  • 建设团购网站多种专业网站建设
  • 赢卡购网站建设软件开发分工5个角色
  • dedecms 网站地图模板为什么要建设图书馆网站
  • 校园电子商务网站建设国外购物网站系统