ArrayList是线性存储结构,底层实现基于数组,
跟数组相比,它能动态的改变容量。但是效率又相对数组低一些。
所以在使用的时候可以先考虑数组,但是在元素个数未知的时候,用arraylist是个不错的选择。
arrayList的初始容量为10.
- add操作的时间复杂度为O(n).
- isEmpty,size,iterator,set,get,listIterator操作的时间复杂度也是O(n),随着元素的个数递增。
- 元素类型必需是Object
- 允许null元素
arrayList扩容的时候会检查容量是否足够,
如果不够,新建一个数组,copy元素到新数组里面去。原来的数组就舍弃了。
public boolean add(E e) { ensureCapacity(size + 1); // 检查数组容量 elementData[size++] = e; return true; } public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length;//现有数组的容量 if (minCapacity > oldCapacity) { //如果在现有数组的容量不够 Object oldData[] = elementData; //ArrayList是使用一个Object数组存储元素 int newCapacity = (oldCapacity * 3)/2 + 1; //计算新建数组的容量 if (newCapacity < minCapacity) //如果依然小于要求的最小容量,设置最小容量为新建数组的大小 newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);//copy元素导新数组 } }
that's all
以上内容,纯属笔记,喜欢看就看,不喜欢看就不要喷
相关推荐
浅析ArrayList内部实现 资源源于不但搜索,自由源于不但努力
在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍。于是抽空好好看了下他们的用法和比较,在这里总结下来,后面有需要改进的...
主要介绍了ArrayList 和 LinkedList的执行效率比较的相关资料,需要的朋友可以参考下
以下是对java中ArrayList与Vector的区别以及HashMap与Hashtable的区别进行了详细的解析。需要的朋友可以过来参考下
在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了。那么这三者到底有什么样的区别呢
浅析java8 Stream Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections. 1.代码 List strList = new ArrayList<>(); strList.add("1");...
在Java的集合框架中,HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐...
Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果。如图所示: 下面将通过一个小实例,来像大家...import java.util.ArrayList; import android.app.Activity;import android.
序列化原因 序列化的原因基本可以归纳为以下三种情况: 1.永久性保存对象,保存对象的字节序列到本地文件中; 2.对象在网络中传递; 3.对象在IPC间传递。 序列化方法 在Android系统中关于序列化的方法一般有两种,...
ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格...