`
liujiawinds
  • 浏览: 136928 次
  • 性别: 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内部实现 ArrayList是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...

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

    本文将深入浅析 ArrayList 和 LinkedList 的执行效率比较,帮助开发者们更好地选择合适的数据结构。 一、概念 ArrayList 是一个基于数组的 List 实现,允许快速访问元素,但是在从列表中部插入和删除元素时,速度...

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

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

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

    ArrayList和Vector,以及HashMap和Hashtable,都是常用的容器,但它们之间存在一些关键的区别,这将影响到在不同场景下的选择和使用。 首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` ...

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

    在C#编程语言中,数组、ArrayList和List都是用来存储一组对象的数据结构,但它们之间存在着显著的差异。 首先,数组是最基础的数据结构,它在内存中以连续的方式存储元素,提供直接通过索引访问元素的能力。数组的...

    Java 集合浅析.txt

    ### Java集合浅析 #### 一、概述 Java集合框架是Java编程语言中处理数据结构的一个强大工具包,它提供了一系列灵活高效的接口和实现来帮助开发者管理数据。本篇文章将重点介绍Java中常用的集合类——`Collection`...

    浅析C语言、Java、Python的数组合并方法.zip

    ArrayList&lt;Integer&gt; list1 = new ArrayList(Arrays.asList(array1)); ArrayList&lt;Integer&gt; list2 = new ArrayList(Arrays.asList(array2)); list1.addAll(list2); int[] mergedArray = new int[list1.size()]; ...

    浅析Android中强大的Dialog

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

    应用源码之防止内存溢出浅析.zip

    本资料"应用源码之防止内存溢出浅析"旨在深入探讨Android应用中的内存优化,帮助开发者避免因不当使用内存导致的应用崩溃。以下是根据标题、描述和标签提炼的相关知识点: 1. **Java内存模型**:Java内存分为堆内存...

    浅析《Java程序设计》的微课设计与实现.zip

    在本压缩包中,主要包含了一份关于“浅析《Java程序设计》的微课设计与实现”的PDF文档,这显然是一份深入探讨如何利用微课技术来教授Java编程的资料。微课是一种短小精悍的教学模式,通常涵盖一个特定的主题或技能...

    浅析Java泛型的使用.pdf

    List&lt;Integer&gt; list1 = new ArrayList(); List&lt;Number&gt; list2 = list1; // 编译错误,不允许这样做 list2.add(new Float(3.1415)); // 如果可以,这会导致类型不匹配 ``` 泛型的另一个关键概念是类型擦除。在编译...

    浅析Java集合及LIst接口

    ArrayList的初始容量为10,当添加元素时,如果元素数量超过初始容量,ArrayList会自动扩容。 例如,下面是一个使用ArrayList的示例代码: ```java ArrayList&lt;String&gt; arr = new ArrayList(); arr.add("123"); ...

    【ASP.NET编程知识】浅析Repeater控件的使用 (原样导出和动态显示隐藏Repeater中的列).docx

    6. **绑定数组和ArrayList**:Repeater能直接绑定各种数据结构,如数组和ArrayList,只需将数据源设置为这些结构即可。 7. **动态变更列信息**:通过修改HeaderTemplate、ItemTemplate和FooterTemplate的内容,可以...

    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");...

    浅析C# 装箱和拆箱

    浅析C# 装箱和拆箱 C# 中的装箱和拆箱是两个重要的概念,它们之间的转换涉及到存储上的变化,影响性能,需要避免装箱和拆箱操作。 一、装箱 装箱是将值类型转换为引用类型的过程。例如,int 类型的变量 i 赋值给 ...

    Java中的HashMap浅析

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

    浅析Java8 中 Map 接口的新方法

    浅析Java8 中 Map 接口的新方法 Java8 中 Map 接口的新方法是指 Java8 中引入的一些新的方法,用于提高 Map 接口的使用效率和便捷性。在本文中,我们将详细介绍 Java8 中 Map 接口的新方法,并通过代码实例来演示其...

    JAVA高级编程资料

    ArrayList、LinkedList、HashSet、HashMap等是常用的集合实现,它们各自具有不同的特性和适用场景。JAVA还提供了泛型(Generic)来增强集合的安全性,避免类型转换异常。同时,接口如List、Set和Map定义了集合的基本...

Global site tag (gtag.js) - Google Analytics