一、对于ArrayList需要掌握的七点内容

ArrayList的创建:即构造器
往ArrayList中添加对象:即add(E)方法
获取ArrayList中的单个对象:即get(int index)方法
删除ArrayList中的对象:即remove(E)方法
遍历ArrayList中的对象:即iterator,在实际中更常用的是增强型的for循环去做遍历
判断对象是否存在于ArrayList中:contain(E)
ArrayList中对象的排序:主要取决于所采取的排序算法(以后讲)
二、源码分析

2.1、ArrayList的创建(常见的两种方式)

List<String> strList = new ArrayList<String>();
List<String> strList2 = new ArrayList<String>(2);
ArrayList源代码:

基本属性:

//对象数组:ArrayList的底层数据结构
private transient Object[] elementData;
//elementData中已存放的元素的个数,注意:不是elementData的容量
private int size;
注意:

transient关键字的作用:在采用Java默认的序列化机制的时候,被该关键字修饰的属性不会被序列化。
ArrayList类实现了java.io.Serializable接口,即采用了Java默认的序列化机制
上面的elementData属性采用了transient来修饰,表明其不使用Java默认的序列化机制来实例化,但是该属性是ArrayList的底层数据结构,在网络传输中一定需要将其序列化,之后使用的时候还需要反序列化,那不采用Java默认的序列化机制,那采用什么呢?直接翻到源码的最下边有两个方法,发现ArrayList自己实现了序列化和反序列化的方法

构造器:

/**
* 创建一个容量为initialCapacity的空的(size==0)对象数组
*/
public ArrayList(int initialCapacity) {
super();//即父类protected AbstractList() {}
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity:" + initialCapacity);
this.elementData = new Object[initialCapacity];
}

/**
* 默认初始化一个容量为10的对象数组
*/
public ArrayList() {
this(10);//即上边的public ArrayList(int initialCapacity){}构造器
}

在我们执行new ArrayList<String>()时,会调用上边的无参构造器,创造一个容量为10的对象数组。

在我们执行new ArrayList<String>(2)时,会调用上边的public ArrayList(int initialCapacity),创造一个容量为2的对象数组。

注意:

上边有参构造器的super()方法是ArrayList父类AbstractList的构造方法,这个构造方法如下,是一个空构造方法:
protected AbstractList() {
}
在实际使用中,如果我们能对所需的ArrayList的大小进行判断,有两个好处:
节省内存空间(eg.我们只需要放置两个元素到数组,new ArrayList<String>(2))
避免数组扩容(下边会讲)引起的效率下降(eg.我们只需要放置大约37个元素到数组,new ArrayList<String>(40))

2.2、往ArrayList中添加对象(常见的两个方法add(E)和addAll(Collection<? extends E> c))

最新文章

  1. 移动开发那些坑之——safari mobile click事件的冒泡bug
  2. C/C++ 结构体 指针 简单输入输出
  3. Only Link: Reading links for button/a etc
  4. 【C语言学习】-05 二维数组、字符串数组、多维数组
  5. JS思维导图
  6. Systemtap kernel.trace(&quot;*&quot;) events source code
  7. Qt数据库sqlite总结
  8. switch 与 whille相互套用
  9. Java流
  10. 视频聊天插件:AnyChat使用攻略之iOS开发指南
  11. vue使用过滤器利用moment实现日期的格式化
  12. Python并发解决方案
  13. 围在栅栏中的爱WriteUp(附QWE密码加解密脚本)
  14. Yii2 RbacController示例
  15. hive javaapi 002
  16. sqler sql 转rest api 源码解析(一)应用的启动入口
  17. Linux命令一览
  18. vue使用watch 观察路由变化,重新获取内容
  19. Tempter of the Bone dfs+剪枝
  20. SQL 实践和技巧 &lt;2&gt;

热门文章

  1. vagrant(二)配置文件vagrantfile详解 以及安装php、nginx、mysql
  2. JAVA代码覆盖率采集与分析方案
  3. 【leetcode】564. Find the Closest Palindrome
  4. 【Http2.0】Http2.0
  5. Struts第一个程序。
  6. 处理警告:编码 GBK 的不可映射字符
  7. JetBrains CLion
  8. Jmeter中动态获取jsessionid来登录
  9. js对象传到后台ACTION使用
  10. c++全局变量,局部变量,内存布局,默认初始化