Collection 属性

//二进制搜索阈值
private static final int BINARYSEARCH_THRESHOLD   = 5000;
//改变阈值
private static final int REVERSE_THRESHOLD        =   18;
//调整阈值
private static final int SHUFFLE_THRESHOLD        =    5;
//填补阈值
private static final int FILL_THRESHOLD           =   25;
//旋转阀值
private static final int ROTATE_THRESHOLD         =  100;
//复制阈值
private static final int COPY_THRESHOLD           =   10;
//替换所有阈值
private static final int REPLACEALL_THRESHOLD     =   11;
//子列表阈值索引
private static final int INDEXOFSUBLIST_THRESHOLD =   35;

ArrayList.add方法内部调用过程

//确保内部能力
ensureCapacityInternal(int minCapacity)
//计算容量
private static int calculateCapacity(Object[] elementData, int minCapacity){//如果 elementData 为空数组if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {//默认容量 和最小容量取最大值return Math.max(DEFAULT_CAPACITY, minCapacity);
}
//否则 返回最小容量
return minCapacity;
}
//确保明确的能力
private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious code
if (minCapacity - elementData.length > 0)grow(minCapacity);
}
//增加容量以确保它至少可以容纳由最小容量参数指定的元素数量(扩容/扩展)
private void grow(int minCapacity) {// overflow-conscious code//老容量int oldCapacity = elementData.length;//新容量 =老容量 +(老容量右移一位)int newCapacity = oldCapacity + (oldCapacity >> 1);//如果新容量-最小容量小于0if (newCapacity - minCapacity < 0)//最小容量赋值给新容量newCapacity = minCapacity;//如果新容量-最大数组大小 大于0if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity);
}
//复制
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {@SuppressWarnings("unchecked")//如果newType类型==Object类型,new Object类型数组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;
}
//新实例
public static Object newInstance(Class<?> componentType, int length)throws NegativeArraySizeException {return newArray(componentType, length);
}
//调用一个本地的 newArray
private static native Object newArray(Class<?> componentType, int length)throws NegativeArraySizeException;
//arraycopy 也是一个本地方法
public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);
//arrayList 扩容 10 15 22 33 49
//右移一位 +老容量

Collection 属性ArrayList.add方法内部调用过程相关推荐

  1. Spring事务失效 -方法内部调用

    首先感谢网友的文章 Spring事务失效的2种情况 JDK动态代理给Spring事务埋下的坑 前提知识: 两个前提 1 注解使用 spring容器的事务管理注解 @org.springframewor ...

  2. ArrayList.add方法底层浅析

    java ArrayList.add方法一共有两种方式,如下代码: ArrayList<Integer> arr = new ArrayList<>(); arr.add(1) ...

  3. 阿里Arthas(阿尔赛斯)-trace查看方法内部调用路径及耗时

    1.trace用法 参数名称                        参数说明 class-pattern                类名表达式匹配 method-pattern       ...

  4. java arraylist add时默认调用tostring_Java基础知识之ArrayList知识点总结

    本文包含常见的ArrayList的基本知识.在一些主题下也自然地引出了Colletion类的一些相关知识. 一.ArrayList的底层数据结构 ArrayList底层是使用一个Object[]数组来 ...

  5. java arraylist.add(),Java ArrayList add()方法与示例

    ArrayList类add()方法 语法:public boolean add(T ele); public void add(int indices, T ele);add()方法在java.uti ...

  6. java arraylist add时默认调用tostring_java中如何调用toString命名的方法?

    展开全部 1.toString()方法e69da5e887aa3231313335323631343130323136353331333262353935 Object类具有一个toString()方 ...

  7. java arraylist add时默认调用tostring_从一道例题谈Arrays.toString()与其他String的转换方法...

    有了上述基础后,我接下来谈谈从一道题目中获得的些许收获. 今天在做题是发现了非常重要的一点.题目来源:http://www.lintcode.com/en/problem/anagrams/ 我们先来 ...

  8. ArrayList add方法深度解析。

    2019独角兽企业重金招聘Python工程师标准>>> ArrayList提供了四个方法添加元素,前两种添加一个元素,后两种为添加一Collection. 第一种我们前面已经见过并且 ...

  9. java内部方法调用_Java学习之类方法的外部和内部调用

    外部调用 外部调用即是在一个类中调用另一个类的方法 package hello2;//首先定义一个类 public class Book { String name; String author; d ...

最新文章

  1. TensorFlow与PyTorch模型部署性能比较
  2. 【转载】JUnit各个注解的含义
  3. 狎昵关系和依恋情结辨诠
  4. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
  5. 量化金融模型的基本Roadmap
  6. 【机器学习】机器学习中缺失值处理方法大全(附代码)
  7. Leetcode题库 762.二进制表示中质数个计算置位(哈希数组 C实现)
  8. 转://Oracle 复合压缩索引场景及性能对比
  9. Linux 出现Permission denied的解决办法
  10. 矩阵乘法(幂次计算)
  11. c语言中的 #ifndef/#define/#endif的作用
  12. java微信投票_微信小程序投票功能
  13. nagios监控系统环境部署安装(LAMP环境)
  14. 【华为2019年校园招聘】2019-4-17 软件题-水果摊小买卖
  15. Caffe2 - (十三) 基于 Python 创建 Operator
  16. 常见的VC Link错误
  17. 大学计算机实验6实验报告,东华大学计算机病毒课实验六宏病毒实验报告
  18. IOS开发入门(11)-导航控制器(1)
  19. 打造一个window桌面应用:在线聊天对话机器人
  20. 移动端适配-flexible.js使用(解决对外部引入css,px2rem能不能转换rem问题)

热门文章

  1. PCL之求点云的BoundingBox
  2. html5引擎 laya,传说中的HTML5超级引擎layabox今日开放
  3. Python学习—2048小游戏等4个小练习
  4. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  5. 强化学习离轨策略:从失败中获得成功经验 - 以追女孩为例 | 采样率的数学意义
  6. Laravel 学习笔记5.3之 Query Builder 源码解析(下)
  7. 手机号中间四位星号显示
  8. Oracle RAC 11R2配置归档、删除策略,闪回配置完整版
  9. 在vs中使用cvQueryHistValue_1D时,报错,无法识别
  10. dmol3给定关键字不在字典中_Materials Studio自学系列——软件安装常见问题及解决方法...