`
java-admin
  • 浏览: 1382256 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

ensureCapacity()方法提高ArrayList的初始化速度

阅读更多

http://www.gznc.edu.cn/yxsz/jjglxy/book/Java_api/java/util/ArrayList.html

 

 

http://dinghaoliang.blog.163.com/blog/static/126540714201061911132780/

 

我们在使用Arraylist时,经常要对它进行初始化工作,在使用add()方法增加新的元素时,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置Arraylist的大小,这样可以大大提高初始化速度。
         请看代码:
   
Java代码
package test;   
  
import java.util.ArrayList;   
  
public class EnsureCapacityTest {   
    public static void main(String[] args){   
        final int N = 1000000;   
        Object obj = new Object();   
           
        //没用调用ensureCapacity()方法初始化ArrayList对象   
        ArrayList list = new ArrayList();   
        long startTime = System.currentTimeMillis();   
        for(int i=0;i<=N;i++){   
            list.add(obj);   
        }   
        long endTime = System.currentTimeMillis();   
        System.out.println("没有调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");   
           
        //调用ensureCapacity()方法初始化ArrayList对象   
        list = new ArrayList();   
        startTime = System.currentTimeMillis();   
        list.ensureCapacity(N);//预先设置list的大小   
        for(int i=0;i<=N;i++){   
            list.add(obj);   
        }   
        endTime = System.currentTimeMillis();   
        System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");   
    }   
}  

package test;

import java.util.ArrayList;

public class EnsureCapacityTest {
	public static void main(String[] args){
		final int N = 1000000;
		Object obj = new Object();
		
		//没用调用ensureCapacity()方法初始化ArrayList对象
		ArrayList list = new ArrayList();
		long startTime = System.currentTimeMillis();
		for(int i=0;i<=N;i++){
			list.add(obj);
		}
		long endTime = System.currentTimeMillis();
		System.out.println("没有调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");
		
		//调用ensureCapacity()方法初始化ArrayList对象
		list = new ArrayList();
		startTime = System.currentTimeMillis();
		list.ensureCapacity(N);//预先设置list的大小
		for(int i=0;i<=N;i++){
			list.add(obj);
		}
		endTime = System.currentTimeMillis();
		System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");
	}
}


输出结果:
没有调用ensureCapacity()方法所用时间:110ms
调用ensureCapacity()方法所用时间:31ms
        结果显而易见,在N的值很大的时候,使用ensureCapacity()方法可大大提高效率;而当N的值较小时,则所用时间差距不明显,这里就不在赘诉,如果感兴趣,各位网友可以自己试试。

分享到:
评论
2 楼 dare_ 2016-06-01  
经过试验 设置之后反而更慢

没有调用ensureCapacity()方法所用时间:143ms
调用ensureCapacity()方法所用时间:463ms
1 楼 OHdream 2013-03-21  
编译的结果如下:EnsureCapacityTest使用了未经检查或不安全的操作,有关详细信息请使用 -Xlint:uncheck重新编译

相关推荐

    深入Java集合学习系列(三):ArrayList实现原理

    ArrayList的容量指的是用于存储列表元素的数组的大小,这个容量在创建ArrayList对象的时候初始化,并且会随着元素的添加而自动增长。当添加元素时,如果当前容量不足以容纳新元素,ArrayList就会创建一个新的更大的...

    ArrayList类操作程序实例

    ArrayList提供了几种构造方法,可以根据需要初始化容量或创建空实例: 1. `ArrayList()`:创建一个空的ArrayList,初始容量为10。 2. `ArrayList(int initialCapacity)`:指定初始容量的ArrayList,避免频繁扩容。 ...

    ArrayList演示

    首先,ArrayList的基本操作包括初始化、添加元素、删除元素、修改元素以及遍历元素。我们可以创建一个ArrayList对象,并指定其初始容量,例如: ```java ArrayList&lt;String&gt; list = new ArrayList(5); ``` 添加元素...

    java提高篇(二一)-----ArrayList.pdf

    2. 指定初始容量构造函数:允许创建指定大小的ArrayList,可以提高性能,因为不需要在添加元素时进行多次数组扩容操作。 3. 集合构造函数:可以通过一个已经存在的集合创建ArrayList实例。 知识点三:ArrayList的...

    ArrayList的实现原理

    - 默认构造函数初始化容量为10。 - 带参数构造函数允许指定初始容量。 - 还有一个构造函数接受一个Collection,将Collection中的元素按顺序添加到ArrayList中。 3. **操作元素的方法** - **set方法**:通过...

    从原码解析ArrayList

    ArrayList在初始化时,默认的容量大小是10。这可以通过查看ArrayList的源码得知,其中定义了一个常量`DEFAULT_CAPACITY`,其值为10。当创建一个新的ArrayList实例时,如果没有指定容量,则会使用这个默认值。然而,...

    Java基础-ArrayList方法全解(上).pdf

    - ArrayList(Collection&lt;? extends E&gt; c): 使用给定的集合初始化ArrayList,将集合的所有元素复制到新创建的ArrayList中。 - ArrayList(int initialCapacity): 指定初始容量的构造函数,避免因添加元素导致的内部...

    jdk源码阅读一:ArrayList

    #### 五、ArrayList的构造函数与初始化 - **构造函数**:ArrayList提供了几种不同的构造函数,以满足不同的初始化需求。 - `ArrayList()`:创建一个空的ArrayList,初始容量为0。在这种情况下,ArrayList将使用一...

    arrayList原理说明

    该数组是`transient`类型的,这意味着当序列化`ArrayList`对象时,不会保存该数组的信息,只保存列表元素本身及其相关的状态信息。 #### 构造方法 `ArrayList`提供了多种构造方法来适应不同的应用场景: 1. **无参...

    Java ArrayList的底层实现方法

    无论是哪种构造方法,都是将 elementData 数组初始化为指定的容量。 add 方法 add 方法是 SxtArrayList 类中最重要的方法之一,该方法将指定的对象添加到集合中。如果集合的大小已经达到当前容量,那么将进行扩容...

    arrayliSt---listDemo

    ArrayList在初始化时,可以通过不带参数的构造器创建一个空的列表,或者指定初始容量的构造器来避免频繁的容量扩展。例如: ```java ArrayList&lt;String&gt; list = new ArrayList(); ArrayList&lt;String&gt; ...

    基于ArrayList常用方法的源码全面解析

    1. 默认的构造方法:ArrayList(),该方法不会初始化容量大小,而是将列表的元素数据引用指向了一个空数组。 ```java private transient Object[] elementData; private static final Object[] EMPTY_ELEMENTDATA = ...

    ArrayList和LinkedList区别及使用场景代码解析

    ArrayList初始化时,elementData数组大小默认为10;每次add()时,先调用ensureCapacity()保证数组不会溢出,如果此时已满,会扩展为数组length的1.5倍+1,然后用array.copy的方法,将原数组拷贝到新的数组中。 ...

    Java编程中ArrayList源码分析

    ArrayList的构造器用于初始化ArrayList对象,add方法用于添加元素到ArrayList中,remove方法用于删除ArrayList中的元素,get方法用于获取ArrayList中的元素,set方法用于设置ArrayList中的元素,iterator和...

    Java集合框架ArrayList源码分析(一)

    1. `ArrayList()`:默认构造方法,初始化一个容量为10的空列表。其实质是调用了`ArrayList(int initialCapacity)`,传入10作为初始容量。 2. `ArrayList(int initialCapacity)`:根据指定的初始容量创建列表。如果...

    java代码-ArrayList

    1. ArrayList的创建与初始化: 创建ArrayList实例可以通过两种方式:无参构造器或指定初始容量的构造器。例如: ```java ArrayList&lt;String&gt; list = new ArrayList(); ArrayList&lt;String&gt; listWithCapacity = new ...

    java代码-使用集合ArrayList对字符串进行存储和管理,运行效果图:

    要创建一个ArrayList,我们首先需要导入`java.util.ArrayList`包,然后实例化ArrayList对象。例如: ```java import java.util.ArrayList; ArrayList&lt;String&gt; list = new ArrayList(); ``` 2. 添加元素: 我们...

    JAVA集合介绍

    `ArrayList` 提供了多种构造函数,以满足不同的初始化需求: 1. **无参数构造函数**:创建一个初始容量为 10 的空列表。 ```java public ArrayList() { this(10); } ``` 2. **指定初始容量的构造函数**:创建...

Global site tag (gtag.js) - Google Analytics