ArrayList.add() 方法吉林快-三平台出租源码解析

吉林快-三平台出租Q1446595067解析源码的方法>>> list.add("hello");

该方法涉及到的方法被我复制到了一个类中,至于解释,全在注释上。初次解析,别喷我!!!

如有不足望评论,随时补充。

package com.nc.sourceCode;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SourceCodeTest_02<E> {

public static void main(String[] args) {

    user us=new user();

    System.out.println(us.getA());

    List<String> list1=new ArrayList<String>();
    System.out.println("开始添加");

// for (Integer i = 0; i <2100000000; i++) {
// list1.add(i.toString());
// }
System.out.println(list1);
list1.add("我就不信了");

    int a1=2147483647;
    int a2=a1+1000;
    System.out.println(a1+"    "+a2);

    System.out.println("=====Arrays.copyOf()方法测试====");
    String [] str={"7","6","5","4","3","2","1"};
    String[] copyOf = Arrays.copyOf(str, 3);
    for (String string : copyOf) {
        System.out.print(string+"   ");
    }
    System.out.println();
    System.out.println(-6-200);
    System.out.println("======位运算符测试======");
    int a=109;
    System.out.println("运算前:"+a);
    System.out.println(a>>1);
    System.out.println(a+(a>>1));
    System.out.println(a+a>>1);
    System.out.println("运算后:"+a);
    System.out.println("=======list集合测试=========");
    List<String> list=new ArrayList<String>();
    list.add("我去哦");
    int size2 = list.size();
    System.out.println("list.size()="+size2);
    System.out.println(list);
    System.out.println(list.get(0));
    System.out.println("=====数学测试======");
    int max = Math.max(10, 1);
    System.out.println(max);
    System.out.println(Integer.MAX_VALUE);
}

transient Object[] elementData;
private int size;
public boolean add(E e) {
    ensureCapacityInternal(size + 1);  //进行数组长度处理
    elementData[size++] = e;//实际添加元素的操作
    return true;
}
private void ensureCapacityInternal(int minCapacity) {//类似中转站
    ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

private static final int DEFAULT_CAPACITY = 10;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//返回一个最大值
private static int calculateCapacity(Object[] elementData, int minCapacity) {//判断数组是否为空(也就是看下是否是第一次集合中添加数据),初始长度为10,否则则就返回数组的下一位元素的下标,也就是上面的size+1
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        return Math.max(DEFAULT_CAPACITY, minCapacity);//返回两个值中的大的那个
    }
    return minCapacity;
}

protected transient int modCount = 0;
private void ensureExplicitCapacity(int minCapacity) {
    modCount++;
    if (minCapacity - elementData.length > 0)//超出object[]长度时
        grow(minCapacity);
}
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;//2147483647-8

private void grow(int c) {//在这个方法中进行长度判断,如果超出当前数组长度,则扩展长度为当前长度的一半或者扩展长度为1
    int a = elementData.length;//获取数组长度
    int b = a + (a >> 1);//类似于除以2,如果为单数,则减一后除以2
    if (b - c < 0)
        b = c;
    if (b - MAX_ARRAY_SIZE > 0)//基本不可能发生,谁会闲着没事往一个list集合里面放21亿多个数据呢
        b = hugeCapacity(c);
    elementData = Arrays.copyOf(elementData, b);//拷贝elementData数组元素从0位到c位至elementData数组
}

private static int hugeCapacity(int minCapacity) {
    if (minCapacity < 0) // overflow
        throw new OutOfMemoryError();
    return (minCapacity > MAX_ARRAY_SIZE) ?
        Integer.MAX_VALUE :
        MAX_ARRAY_SIZE;
}

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) {
    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));//将original源数组中从第0位开始到Math位结束的元素拷贝到copy数组中从copy数组的地0位开始拷贝
    return copy;
}

}

原文地址:http://blog.51cto.com/13880707/2147968

时间: 2024-10-09 20:51:32

ArrayList.add() 方法吉林快-三平台出租源码解析的相关文章

你是程序员,帮我修个电脑吧?吉林快三平台出租

试问有哪个程序员没被要求过帮忙修修电脑.帮忙看看网络怎么了?吉林快三平台出租Q 1152880099  vx: wowotou552  罔 www.1152880099.com/ 如果不是非常亲密的人,那能提出这种要求的人怕是情商智商都有点毛病. 情商上来说,修电脑这种需要高专业度且花个钱就能解决的事情,不适合随便拜托别人;智商上来说--朋友,你见过程序员找工作面试的时候,HR考他怎么修电脑的吗? 生活里这类例子多了去了. 遇到健身教练就想让人帮你3天瘦10斤,还得不打针.不吃药.不节食.不运动

MyBatis初始化过程解析----广西11选5平台出租源码解析

准备工作 为了看清楚广西11选5平台出租的 Q1446595067 整个初始化过程,先创建一个简单的Java项目,目录结构如下图所示: 1.1 Product 产品实体类 public class Product { private long id; private String productName; private String productContent; private String price; private int sort; private int falseSales; p

Yolo系列学习1-Yolov3训练福彩快三平台出租自己的数据

目的:福彩快三平台出租haozbbs.comQ1446595067 实现利用yolov3训练自己的数据集(voc格式) 方法: 1)构建VOC数据集 将你手中的数据集的标注txt修改成voc格式的txt,voc格式如下: 000002.jpg car 44 28 132 121 000003.jpg car 54 19 243 178 000004.jpg car 168 6 298 164 其中第一列为图片名,第二列为目标类别,最后是目标的包围框坐标(左上角和右下角坐标). 批量修改文件名py

一篇文章总结幸运快三平台出租了JVM类加载机制

1.加载幸运快三平台出租haozbbs.comQ1446595067 把二进制表示的Class文件读进JVM中2.连接 验证(验证字节码的有效性) 准备(初始化静态变量的值) 解析(把符号引用转直接引用) 3.初始化为静态变量赋值二.什么时候需要开始加载类? 1.主动引用时需要加载类 使用new 关键字实例化对象 读取或设置一个类的静态字段(被final修饰.已在编译期把结果放入常量池的静态字段除外) 调用一个类的静态方法 2.被动引用时不需要加载类 在子类中引用父类的静态属性,不会触发子类的加

直播答题助手江苏快三平台出租

"世界杯要搞答题直播江苏快三平台出租Q 1152880099  vx: wowotou552  罔 www.1152880099.com/,搜狐准备了百万奖金." 这是近日搜狐董事局主席兼CEO张朝阳在接受媒体采访时,对外界透露的信息. 从今年年初开始,直播答题一路火爆不减. 然而,在众多平台蜂拥进入直播答题领域时,一些问题也逐渐暴露出来,其中,最受关注的莫过于各种辅助类作弊软件的出现. 就在答题者对"答题助手"还处于爱恨交加之际,一则新闻引爆舆论--"百

何快速的提高快三平台出租嵌入式的水平呢?

随着计算快三平台出租haozbbs.comQ1446595067机行业的发展.智能产品的增多.嵌入式技术也日渐变得流行.但是目前国内从事嵌入式这方面的人才比较稀缺.俗话说物以稀为贵,职位也一样.嵌入式人才稀缺,身价自然就变高了,越有经验价格就越高,看到有这样的机会很多人也就按耐不住了.对于一些非专业的人士来说,怎么样学习嵌入式就成了他们头疼的问题.下面就有小编为大家介绍一下如何快速有效的学习嵌入式. 如何快速的提高嵌入式的水平呢? 1.多动手练习 我国的大学很少让学生有实践能力,尤其是在大量扩招

STM32把SD卡内极速快三平台出租搬运到内部FLASH

STM32操极速快三平台出租haozbbs.comQ1446595067 作访问flash,包括写入数据到flash和从flash读取数据 :https://blog.csdn.net/Ace_Shiyuan/article/details/78196648 这篇文章写得比较明白,但是它写的函数不饱满,没有把Flash充分写满.请看写数组的函数:FLASHStatus = FLASH_ProgramHalfWord(STARTADDR+WriteAddress+i*2, temp);//写入数据

分布式之抉择分布式锁快三平台出租

为什么写这篇文章?目前网上大部分的基于zookeeper快三平台出租请QQ2952777280[话仙源码论坛]http://hxforum.com [木瓜源码论坛]http://papayabbs.com ,和redis的分布式锁的文章都不够全面.要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫.坦白说,这种老题材,很难写出新创意,博主内心战战兢兢,如履薄冰,文中有什么不严谨之处,欢迎批评.博主的这篇文章,不上代码,只讲分析.(1)在redis方面,有开源redisson的ja

Linux系统下吉林快-三平台开发环境搭建以及关于变量的基本操作

有问题联系Q1446595067吉林快-三平台开发, 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议.Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(