`
liujiawinds
  • 浏览: 131941 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ArrayList浅析

    博客分类:
  • java
 
阅读更多

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内部实现

    浅析ArrayList内部实现 资源源于不但搜索,自由源于不但努力

    C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)

     在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍。于是抽空好好看了下他们的用法和比较,在这里总结下来,后面有需要改进的...

    深入浅析ArrayList 和 LinkedList的执行效率比较

    主要介绍了ArrayList 和 LinkedList的执行效率比较的相关资料,需要的朋友可以参考下

    浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别

    以下是对java中ArrayList与Vector的区别以及HashMap与Hashtable的区别进行了详细的解析。需要的朋友可以过来参考下

    浅析C#中数组,ArrayList与List对象的区别

    在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了。那么这三者到底有什么样的区别呢

    java8源码-java8-analysis:浅析java8

    浅析java8 Stream Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections. 1.代码 List strList = new ArrayList&lt;&gt;(); strList.add("1");...

    Java中的HashMap浅析

    在Java的集合框架中,HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐...

    浅析Android中强大的Dialog

    Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果。如图所示: 下面将通过一个小实例,来像大家...import java.util.ArrayList; import android.app.Activity;import android.

    Android中的序列化浅析

    序列化原因 序列化的原因基本可以归纳为以下三种情况: 1.永久性保存对象,保存对象的字节序列到本地文件中; 2.对象在网络中传递; 3.对象在IPC间传递。 序列化方法 在Android系统中关于序列化的方法一般有两种,...

    asp.net知识库

    ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格...

Global site tag (gtag.js) - Google Analytics