分享人:韩亚博
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本
ArrayList提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小
要注意的是ArrayList并不是线程安全的,因此一般建议在单线程中使用ArrayList。
2.1 ArrayList重要的方法和特性
构造器
--ArrayList():构造一个初始容量为10的空列表。这个10在源码中没找到,但是在jdk官网找到了 10
--ArrayList(Collection c):按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。
--ArrayList(int initialCapacity):构造具有指定初始容量的空列表。
如果多个线程同时访问ArrayList实例,并且至少有一个线程在结构上修改了列表,则 必须在外部进行同步。
add()、set()、clear()
对于代码中的资源其实无外乎也是 创建、销毁、增删改查
其实就目前来说,基本上我们对数据库(持久化资源)以及代码中的某个对象所作的操作都是上边说的
个人感觉:所有的操作其实都是在对资源进行操作,创建-->增删改查-->销毁
ArrayList的使用建议
ArrayList是基于数组实现的,而LinkedList是基于链表实现的;
数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素
链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。搜索不易
如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组,也就是ArrayList;
如果应用需要经常插入和删除元素你就需要用链表数据结构了,也就是LinkedList。
ArrayList的大小是如何自动增加的?你能分享一下你的代码吗?
这是最有技巧性的的一个问题,大多数人都无法回答。事实上,当有人试图在arraylist中增加一个对象的时候,Java会去检查arraylist,以确保已存在的数组中有足够的容量来存储这个新的对象。如果没有足够容量的话,那么就会新建一个长度更长的数组,旧的数组就会使用Arrays.copyOf方法被复制到新的数组中去,现有的数组引用指向了新的数组。可以看源码
如何复制某个ArrayList到另一个ArrayList中去?写出你的代码?
1.使用clone()方法,比如ArrayList newArray = oldArray.clone();
2.使用ArrayList构造方法,比如:ArrayList myObject = new ArrayList(myTempObject);
3.使用Collection的copy方法。
简单看下源码以及使用
ArrayList扩容
ArrayList是动态的,那么就允许增长自身的长度,这种情况下必须有扩容机制存在
按照从10开始,1.5倍扩容,直接看源码
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
http://www.cnblogs.com/rickie/articles/67978.html
https://blog.csdn.net/xiaodaiye/article/details/50818966
https://www.cnblogs.com/kuoAT/p/6771653.html
欢迎大家讨论