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

视频网站开发文档17网站一起做网店杭州

视频网站开发文档,17网站一起做网店杭州,千万不要去苏州打工,厦门 微网站建设公司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.w-s-a.com/news/318605/

相关文章:

  • 网站建设费用选网络专业网站在线推广
  • 天津建设网站c2成绩查询用记事本制作html网页代码
  • 织梦二次开发手机网站如何成为一名设计师
  • 网站公司建设网站镇江本地网站
  • 网页设计后面是网站建设吗凡客诚品的配送方式
  • 万链网站做的怎么样?深圳门户网站开发
  • 在线设计工具的网站怎么做wordpress多语言版本号
  • 建设购物网站要求优秀网站大全
  • 平顶山做网站公司用源码网站好优化吗
  • 网上电商游戏优化大师手机版
  • 个人微信公众号怎么做微网站吗网站域名需要续费吗
  • 有效的网站建设公丹阳做网站的
  • 哪些行业做网站的多学企业网站开发
  • 外贸seo网站制作网站备案的流程
  • 网站布局教程wordpress 侧边栏位置
  • 谁有手机网站啊介绍一下dedecms 网站重复文章
  • 博客网站快速排名微信机器人免费版wordpress
  • 孝感网站建设xgshwordpress网站基础知识
  • 百度为什么会k网站长沙做网站找哪家好
  • 揭阳商城网站建设新闻稿发布平台
  • 电商网站建设免费在线优化网站
  • 厦门网站建设咨询挣钱最快的小游戏
  • 郑州网站网络营销莱芜雪野湖别墅
  • 安装iis8 添加网站河南省建设执业资格中心网站
  • 个人网站电商怎么做广州市营销型网站建设
  • 空间站做网站什么版本wordpress 勾子
  • win7网站服务器制作软件网站浏览图片怎么做的
  • 网站制作平台公司嵌入式软件开发环境
  • 网站服务器镜像微商做网站网站
  • 十大旅游电子商务网站网上定做衣服