博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于ArrayList
阅读量:6694 次
发布时间:2019-06-25

本文共 1797 字,大约阅读时间需要 5 分钟。

  hot3.png

      ArrayList做为List接口的可变数组的实现,我觉得很有必要去看下源代码,看看N人是怎么实现有序集合的。

     首先,看下add方法的实现,看看它是如何实现数组长度可变的。源码如下:

public boolean add(E e) {        ensureCapacityInternal(size + 1);  // Increments modCount!!        elementData[size++] = e;        return true;    }

对于返回的值永远为true这个现象,我们暂且搁置不理,看下方法中的第二句代码,很容易理解,可以看下elementData数组变量是如何申明的。源码如下:

private transient Object[] elementData;

代码中出现了一个我看不太明白的关键字transient,得去查查这个关键字是什么意思。

transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 

原来是一个用来标志是否串行化的关键字,貌似我现在还用不上,飞过

光查看elementData的申明肯定不行,得去看下它是如何初始化的,如何new出来的。源码如下:

public ArrayList() {        this(10);    }    public ArrayList(int initialCapacity) {        super();        if (initialCapacity < 0)            throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);        this.elementData = new Object[initialCapacity];    }    public ArrayList(Collection
c) { elementData = c.toArray(); size = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); }
一下子就把ArrayList的三个构造方法全部列出来了,很突然,也很有必要。

首先,我们看下无参的构造方法,相当的easy,跳过。看下参数为int的构造方法,突然发现也非常简单。略微提一下,当你使用ArrayList new对象时,最好不要传入小于0的整数。

很显然,第三个构造方法才是重点。从这里,我们会发现,Collection的toArray方法是那么的重要。看到了这一点就可以了。我们回到刚开始的add方法。列出ensureCapacityInternal方法的实现。

private void ensureCapacityInternal(int minCapacity) {        modCount++;//shut,怎么又来一个我不清楚底细的变量?!        // overflow-conscious code        if (minCapacity - elementData.length > 0)            grow(minCapacity);    }
很突然的,我发现我漏掉了几个重要的类没有看,他们就是AbstractList,AbstractCollection,赶紧去看看。

转载于:https://my.oschina.net/tunie/blog/121488

你可能感兴趣的文章
Scala编译器安装
查看>>
BGP中COMMUNITY属性
查看>>
2018年最受欢迎的五大机器学习工具和五大数据学习工具
查看>>
冒泡排序—冒泡排序算法优化
查看>>
SpringCloud Feign 传递复杂参数对象需要注意的地方
查看>>
正则表达式储备(一)
查看>>
英语单词(计算机类)
查看>>
正则表达式讲解
查看>>
for循环展开为duff装置技术
查看>>
第二_文件权限
查看>>
安卓7.0系统手机最简单激活xposed框架的教程
查看>>
nginx命令详解
查看>>
C++初入门
查看>>
Tar 归档命令的一点心得
查看>>
ip 命令 和ifconfig 命令 删除IP
查看>>
Caching
查看>>
Centos yum 邮件服务器配置 CentOS release 6.3 (Final)
查看>>
《配电网自动化技术》第四、五章
查看>>
Mysql(手动编译详细思路,以及增删改查,授权,备份还原)
查看>>
我的友情链接
查看>>