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是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...
本文将深入浅析 ArrayList 和 LinkedList 的执行效率比较,帮助开发者们更好地选择合适的数据结构。 一、概念 ArrayList 是一个基于数组的 List 实现,允许快速访问元素,但是在从列表中部插入和删除元素时,速度...
在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍。于是抽空好好看了下他们的用法和比较,在这里总结下来,后面有需要改进的...
ArrayList和Vector,以及HashMap和Hashtable,都是常用的容器,但它们之间存在一些关键的区别,这将影响到在不同场景下的选择和使用。 首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` ...
在C#编程语言中,数组、ArrayList和List都是用来存储一组对象的数据结构,但它们之间存在着显著的差异。 首先,数组是最基础的数据结构,它在内存中以连续的方式存储元素,提供直接通过索引访问元素的能力。数组的...
### Java集合浅析 #### 一、概述 Java集合框架是Java编程语言中处理数据结构的一个强大工具包,它提供了一系列灵活高效的接口和实现来帮助开发者管理数据。本篇文章将重点介绍Java中常用的集合类——`Collection`...
ArrayList<Integer> list1 = new ArrayList(Arrays.asList(array1)); ArrayList<Integer> list2 = new ArrayList(Arrays.asList(array2)); list1.addAll(list2); int[] mergedArray = new int[list1.size()]; ...
Android中经常会使用到Dialog(弹出框效果),而且功能非常强大,可以模拟出N种弹出框效果。如图所示: 下面将通过一个小实例,来像大家...import java.util.ArrayList; import android.app.Activity;import android.
本资料"应用源码之防止内存溢出浅析"旨在深入探讨Android应用中的内存优化,帮助开发者避免因不当使用内存导致的应用崩溃。以下是根据标题、描述和标签提炼的相关知识点: 1. **Java内存模型**:Java内存分为堆内存...
在本压缩包中,主要包含了一份关于“浅析《Java程序设计》的微课设计与实现”的PDF文档,这显然是一份深入探讨如何利用微课技术来教授Java编程的资料。微课是一种短小精悍的教学模式,通常涵盖一个特定的主题或技能...
List<Integer> list1 = new ArrayList(); List<Number> list2 = list1; // 编译错误,不允许这样做 list2.add(new Float(3.1415)); // 如果可以,这会导致类型不匹配 ``` 泛型的另一个关键概念是类型擦除。在编译...
ArrayList的初始容量为10,当添加元素时,如果元素数量超过初始容量,ArrayList会自动扩容。 例如,下面是一个使用ArrayList的示例代码: ```java ArrayList<String> arr = new ArrayList(); arr.add("123"); ...
6. **绑定数组和ArrayList**:Repeater能直接绑定各种数据结构,如数组和ArrayList,只需将数据源设置为这些结构即可。 7. **动态变更列信息**:通过修改HeaderTemplate、ItemTemplate和FooterTemplate的内容,可以...
浅析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");...
浅析C# 装箱和拆箱 C# 中的装箱和拆箱是两个重要的概念,它们之间的转换涉及到存储上的变化,影响性能,需要避免装箱和拆箱操作。 一、装箱 装箱是将值类型转换为引用类型的过程。例如,int 类型的变量 i 赋值给 ...
在Java的集合框架中,HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐...
浅析Java8 中 Map 接口的新方法 Java8 中 Map 接口的新方法是指 Java8 中引入的一些新的方法,用于提高 Map 接口的使用效率和便捷性。在本文中,我们将详细介绍 Java8 中 Map 接口的新方法,并通过代码实例来演示其...
ArrayList、LinkedList、HashSet、HashMap等是常用的集合实现,它们各自具有不同的特性和适用场景。JAVA还提供了泛型(Generic)来增强集合的安全性,避免类型转换异常。同时,接口如List、Set和Map定义了集合的基本...