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

html网站正在建设源码网站建设的重要性

html网站正在建设源码,网站建设的重要性,电商网站怎样做优化才最合理,网站内容页怎么做了解 ArrayList 在 Java 中常用集合类之间的关系如下图所示: 从图中可以看出 ArrayList 是实现了 List 接口,并是一个可扩容数组(动态数组),它的内部是基于数组实现的。它的源码定义如下: public class A…

了解 ArrayList

在 Java 中常用集合类之间的关系如下图所示:

在这里插入图片描述

从图中可以看出 ArrayList 是实现了 List 接口,并是一个可扩容数组(动态数组),它的内部是基于数组实现的。它的源码定义如下:

public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
}
  • ArrayList 可以实现所有可选择的列表操作,允许所有的元素,包括空值。ArrayList 还提供了内部存储 List 的方法,它能够完全替代Vector,只有一点例外,ArrayList 不是线程安全的容器。

  • ArrayList 有一个容量的概念,这个数组的容量(size)就是 List 用来存储元素的容量。

  • ArrayList 不是线程安全的容器,如果多个线程中至少有两个线程修改了 ArrayList 的结构的话就会导致线程安全问题,作为替代条件可以使用线程安全的 List,应使用 Collections.synchronizedList

    List list = Collections.synchronizedList(new ArrayList<>());
    
  • ArrayList 具有 fail-fast 快速失败机制,能够对 ArrayList 作出失败检测。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生 fail-fast,即抛出ConcurrentModificationException异常。

通过源码分析 ArrayList 的扩容机制

当使用空参构造器进行创建 ArrayList 的时候,实际上给 elementData 初始化赋值的是一个空数组 {}

//数组列表的大小(包含的元素数),初始化为 0
private int size;
//存储数组列表元素的数组缓冲区。
transient Object[] elementData;
//默认初始化容量为10
private static final int DEFAULT_CAPACITY = 10;
//默认空数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//使用空参构造器创建 ArrayList 时,实际上初始化赋值的是一个空数组
public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

当首次调用 add(E e) 方法进行添加第一个元素时,会首先调用 ensureCapacityInternal 方法,传入参数 1

//将指定的元素追加到此列表的末尾
public boolean add(E e) {ensureCapacityInternal(size + 1);  // Increments modCount!!elementData[size++] = e;return true;
}

ensureCapacityInternal 方法中,会调用 calculateCapacity 方法,传入参数为 elementData,1

private void ensureCapacityInternal(int minCapacity) {ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

calculateCapacity 方法中,判断 elementData 是否为空数组,由于是初始化赋值的是一个空数组 {},所以符合 if 条件,返回 (DEFAULT_CAPACITY, minCapacity)【10,1】 中大的那个,此时返回 10

private static int calculateCapacity(Object[] elementData, int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {return Math.max(DEFAULT_CAPACITY, minCapacity);}return minCapacity;
}

接着返回到 ensureCapacityInternal 方法中,继续调用 ensureExplicitCapacity 方法验证是否需要扩容,传入参数 10 ,此时 minCapacity=10,elementData.length=0 ,相减小于0,执行 grow 方法扩容,传入参数 10,当添加第2-10个元素时,不会执行 grow 方法,一直到数组已经满元素时才执行 grow 方法扩容:

private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious codeif (minCapacity - elementData.length > 0)grow(minCapacity);
}

grow 方法中,此时 minCapacity=10,oldCapacity=0,newCapacity=0 ,符合 newCapacity - minCapacity < 0 条件,执行 newCapacity = minCapacity; 不满足 newCapacity - MAX_ARRAY_SIZE > 0 ,执行 Arrays.copyOf() 方法将 elementData 指向的数组中的元素复制到新的数组中,新的数组长度为 10,并让 elementData 指向新的数组,int newCapacity = oldCapacity + (oldCapacity >> 1) 完成1.5倍扩容。

private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity);
}
http://www.hengruixuexiao.com/news/28986.html

相关文章:

  • 做爰真实网站seo排名优化教程
  • 昆明设计网站建设百度指数分析案例
  • 青岛好的网站制作推广游戏推广员到底犯不犯法
  • 绿色农产品网站 模板四川网站制作
  • 怎么做自己的网站全网搜索关键词查询
  • 哪个网站可以做效果图赚钱云南网络营销公司哪家好
  • 懂福溶州做戒网站关键词优化是什么
  • 签到做任务赚钱的网站企业网站制作要求
  • 做百度网站优化多少钱查询网138网站域名
  • 昆明网站建设一条龙seo关键词排名实用软件
  • 规模大的企业建站html网页制作app
  • 可以接单做3d网站站长工具官网
  • 武汉市内做网站的公司域名是什么
  • 毕业设计都是做网站吗网站建设服务
  • 广西中小企业网站建设焦作整站优化
  • 微信平台的微网站怎么做的免费网页设计制作网站
  • 做网站比较大的公司哈尔滨网站优化
  • 网站制作推广方案app推广方案范例
  • 做影视网站违法百度在线人工客服
  • 专注徐州网站建设站长之家音效
  • p2p提供网站建设违法十大网站平台
  • it黑马官网搜索引擎优化方法
  • 做性事的视频网站苏州seo门户网
  • 广告传媒公司网站比百度好用的搜索软件
  • web网页代码模板搜索引擎优化seo优惠
  • 怎么在网站后台做图片新闻一手项目对接app平台
  • 做网站注意武汉seo搜索引擎
  • 互联网公司排名伊对排第几网站优化课程培训
  • 百度站长网站规则改版关键词如何快速排名
  • 功能类似淘宝的网站建设快速seo软件