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

网站建设选题网站仿制 个人

网站建设选题,网站仿制 个人,签名设计在线,网站怎么做关键词怎么优化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.dnsts.com.cn/news/64710.html

相关文章:

  • 优秀电商网站设计网站建设维护 知乎
  • 什么网站做任务seo数据统计分析工具有哪些
  • wordpress调用站点标题哪个网站可以做excel
  • 揭阳做网站网站建设推广有没有
  • 网站开发源代码修改无锡网站推广优化费用
  • 艺术学校网站模板自助定制网站开发公司
  • 做网站的关键性技术有哪些主机免费云服务器如何
  • 台州网站建设优化网站建设运营维护合同
  • 合肥网站制作方案网站建设销售话术开场白
  • 马卡龙网站建设方案知春路网站建设
  • 网站外包哪家公司好图片转换成网址链接
  • 营销网站的案例分析找网站推广
  • 建个地方门户网站要多少钱如何选择网站定制公司
  • 盐山网站建设价格优化教育培训
  • 互粉的网站是怎么做的建一个网上商城需要多少钱
  • 做水果网站需要些什么互动平台是什么
  • 怎样制作网页新手自学入门上海企业网站seo
  • 广州网站建设专注乐云seo遵义网站建公司
  • 浅谈阿里企业的电子网站建设杭州网站建设 杭州app
  • 响应式网站搭建百度小程序市场监督管理局上班时间
  • 深圳营销型网站建设电话建站素材网站模板
  • 怎么简单做网站排名网站建设申请总结
  • 天津高端模板建站手机门户网站源码
  • 中天建设招标网站天宁网站建设
  • qq怎么做自己的网站艺术公司网站定制
  • php网站开发技术环境要求如何加强门户网站建设
  • 网站开发的app进入百度官网
  • app网站制作下载河北新出现的传染病
  • 网站开发设计实训实训总结安全教育平台登录入口
  • 二级网站收录下载app的软件并安装