`
42087743
  • 浏览: 236984 次
  • 性别: Icon_minigender_1
  • 来自: 合肥&上海
社区版块
存档分类
最新评论

ArrayList的性能问题,大家看看

 
阅读更多
ArrayList的特点是可以动态改变长度,但是每次改变长度的时候性能花费是很大的,所以我们可以通过它自身的ensureCapacity()事先就给它决定好长度,这里有个前提,必须大概预测它的长度是多少.但是测试出结果出乎我的意料,大家一起来看看什么原因
		final int count = 100000;

		long startTime, stopTime, time;

		ArrayList<String> arrayList = new ArrayList<String>();
		ArrayList<String> arrayList2 = new ArrayList<String>();

		startTime = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			arrayList.add("a");
		}
		stopTime = System.currentTimeMillis();
		time = stopTime - startTime;
		System.out.println("ArrayList插入100000个数的时间是:" + time);
		
		startTime = System.currentTimeMillis();
		arrayList2.ensureCapacity(count);
		for (int i = 0; i < count; i++) {
			arrayList.add("a");
		}
		stopTime = System.currentTimeMillis();
		time = stopTime - startTime;
		System.out.println("ArrayList在确定大小后插入100000个数的时间是:" + time);

// result:
// ArrayList插入100000个数的时间是:32
// ArrayList在确定大小后插入100000个数的时间是:62

分享到:
评论

相关推荐

    使用对象ArrayList填充DataGrid,C#源代码ArrayList MyList = new ArrayList();

    现在,让我们来看一下如何使用ArrayList MyList来填充DataGrid: ```csharp using System; using System.Windows.Forms; using System.Collections; // 创建一个自定义的对象类型,例如Person public class Person...

    Vector 与ArrayList区别

    从 API 的角度来看,`Vector` 和 `ArrayList` 非常相似,两者都提供了基本的列表操作,如添加、删除、获取元素等。然而,它们之间的主要区别在于同步性和一些细节上的处理方式。 **1. 同步性** - **Vector**:是...

    ArrayList测试.

    1. 性能:由于ArrayList基于数组,因此插入和删除操作在列表中间时性能较差,因为需要移动大量元素。对于频繁的中间操作,考虑使用LinkedList或List(泛型版本)可能更合适。 2. 安全性:ArrayList是非线程安全的,...

    ArrayList底层原理

    面试中可能会遇到关于ArrayList的问题,比如询问ArrayList和LinkedList的区别,或者如何优化ArrayList的性能。ArrayList更适合于元素的随机访问和遍历,而不适合频繁的插入和删除。如果插入和删除操作较多,...

    硬核ArrayList源码分析,答应我每天看一遍好么

    《硬核ArrayList源码分析——深入理解Java集合框架》 ArrayList是Java集合框架中的一个重要组成部分,它是基于动态数组实现的列表。...每天温习ArrayList的源码,无疑能提升我们的编程素养和问题解决能力。

    ArrayList反转排序1

    首先,我们来看如何反转ArrayList。在Java中,我们可以使用`Collections.reverse()`方法来实现这个功能。但在C#中,ArrayList类本身并不包含一个直接的`reverse()`方法。然而,你可以通过迭代ArrayList并交换首尾...

    JAVALinkedList和ArrayList的使用及性

    在进行性能分析时,不仅要看操作的时间复杂度,还要结合具体业务场景下的操作频率和数据规模,以做出最佳决策。对于大型项目,了解并合理利用这些数据结构的特性,能够显著提高代码的执行效率和整体性能。

    ArrayList、Vector、LinkedList 的区别.docx

    ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是...ArrayList、Vector、LinkedList 三个类各有其特点和性能特征,在实际应用中,选择哪个类取决于具体的需求和性能要求。

    java使用ArrayList遍历及效率比较实例分析

    首先,我们来看看四种不同的遍历ArrayList的方法: 1. 使用Iterator迭代器: ```java Iterator it = arrL.iterator(); while(it.hasNext()){ arrLTmp1.add(it.next()); } ``` 这种方法创建了一个Iterator对象,...

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    ArrayList和Vector都是实现了List接口的,但是ArrayList的性能比Vector好。 接下来,我们来看Map和HashMap的区别。Map是一个接口,而HashMap是一个实现了Map接口的具体类。Map提供了key到value的映射,一个Map中不...

    超详细JDK1.8 ArrayList集合默认长度及扩容分析

    接下来,我们看看`ensureCapacityInternal(int minCapacity)`方法。这个方法是ArrayList扩容的核心,它的目标是确保数组的容量至少等于`minCapacity`: ```java private void ensureCapacityInternal(int ...

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

    首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` 是非线程安全的。这意味着在多线程环境下,如果不进行额外的同步控制,多个线程同时操作同一个ArrayList实例可能会导致数据不一致。 - ...

    java ArrayList和Vector的区别详解

    首先,让我们来看看ArrayList和Vector的相同点: 1. **继承关系**:两者都继承自AbstractList,并且实现了List接口,以及Serializable和Cloneable接口。 2. **底层实现**:ArrayList和Vector的基础结构都是基于数组...

    Java编程中为了性能需做的26件事 (编程必看)

    9. **避免依赖 finalize 方法**:finalize 方法用于资源清理,但其执行时机不确定,可能导致性能问题。推荐使用 try-with-resources 或手动关闭资源。 10. **使用基本数据类型代替对象引用**:如使用 "hello" 字符...

    java华为面试题,大家可以看看

    ArrayList基于动态数组实现,提供了快速的随机访问能力,但在列表中间插入和删除操作性能较差。Vector也是基于动态数组实现,但它是线程安全的,不过这种线程安全是以牺牲性能为代价的。LinkedList基于双向链表实现...

    c sharp 集合的问题

    接下来,我们来看看ArrayList。ArrayList是.NET框架早期版本中常用的动态数组,它可以存储任意类型的对象。创建ArrayList的实例如下: ```csharp ArrayList al = new ArrayList(); for (int i = 0; i ; i++) { al....

    Java集合1

    然而,这也带来了插入和删除操作的性能问题。当在ArrayList中增加或删除元素时,由于需要保持数组的连续性,系统会遍历整个数组,定位目标位置,并移动后续元素,这导致了较大的开销。在多线程环境下,ArrayList不是...

    java提高性能.pdf

    从提供的内容来看,文档的内容显得有些杂乱,但是通过内容片段可以推测,作者可能在讲解Java中提升性能的一些关键点和最佳实践。 1. 静态初始化(static initialization):在Java中,静态初始化块在类加载时执行一...

    java 动态数组的体现

    扩容操作是ArrayList性能的关键因素之一。虽然它提供了便利,但频繁的扩容会导致额外的时间开销。因此,如果我们知道要存储的大致元素数量,可以通过构造函数传入初始容量来避免不必要的扩容。 ArrayList提供了丰富...

    java 集合操作

    了解了这些基本概念后,我们来看看如何根据实际需求选择合适的集合类型: - 当需要快速访问元素,且插入和删除相对较少时,ArrayList是理想的选择。 - 如果在多线程环境中需要保证数据一致性,或者对性能要求不那么...

Global site tag (gtag.js) - Google Analytics