基础大杂烩 -- 目录

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

问题:当ArrayList中放入的元素一直增加会如何增长数组长度???

Class : ArrayList

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    /**
* 默认容量值
*/
private static final int DEFAULT_CAPACITY = 10; /**
* 默认容量为空的数组
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /**
* 用来存储元素
*/
transient Object[] elementData; /**
* 数组大小
*
* @serial
*/
private int size; /**
* 添加元素
*
* @param e
* @return
*/
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
} /**
* 确保容量动态增长
*
* @param minCapacity
*/
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
} ensureExplicitCapacity(minCapacity);
} /**
* 确定新的容量
*
* @param minCapacity
*/
private void ensureExplicitCapacity(int minCapacity) {
modCount++; if (minCapacity - elementData.length > 0)
grow(minCapacity);
} /**
* 数组最大大小
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; /**
* 数组容量动态增长
*
*/
private void grow(int minCapacity) {
// overflow-conscious code
int 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);
} /**
* 计算数组最终容量
*
* @param minCapacity
* @return
*/
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
}
}

Class : Arrays

    @SuppressWarnings("unchecked")
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
    public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}

Class : System

   public static native void arraycopy(Object src,  int  srcPos,
Object dest, int destPos,
int length);

总的来说依旧是调用System类中native方法重新创造一个数组。

啦啦啦

最新文章

  1. 新浪微博客户端(40)-使用AFN发送带图片的微博
  2. fedora23的firefox不能播放优酷视频?
  3. [BZOJ 1303] [CQOI2009] 中位数图 【0.0】
  4. 8个常用的Android开发工具
  5. SharePoint BCS
  6. jQuery.form Ajax无刷新上传错误 (jQuery.handleError is not a function) 解决方案
  7. StreamWriter(ms, new UTF8Encoding(false))可以达到不输出BOM的需求。
  8. Edward&#39;s Cola Plan
  9. JDBC知识详解
  10. 利用js实现 禁用浏览器后退
  11. 从HTTL模板引擎看软件设计原则
  12. centos安装php7.2环境
  13. 安装bootcamp时提示“找不到$winpedriver$文件夹,请验证该文件夹是否和bootcamp处于同一文件夹内?”
  14. 简单分析下mybatis中mapper文件中小知识
  15. 删除一个cjson导致系统死机
  16. lesson7-图像描述 -小象cv
  17. Idea集成Lombok代码注释来精简代码
  18. jenkins部署war包到远程服务器的tomcat
  19. Unity3D笔记 英保通六 角色控制器
  20. Linux实验楼学习之三

热门文章

  1. css中display:none与visibility: hidden的区别
  2. C# 格式化新招
  3. AngularJS转换请求内容
  4. vim 语法着色完全配置
  5. jQuery()方法的第二个参数
  6. 我是陌生人 Java中导入、导出Excel
  7. 大数高精度计算库gmp简介
  8. vue中使用localstorage
  9. docker运行中的container怎么修改之前run时的env
  10. linux每日命令(27):chmod命令