ArrayList其中有两个构造器,一个ArrayList(),一个ArrayList(int initialCapacity).我想大家一定是经常用第一个。下面看看这两个构造器的区别。
先举个例子:
List<String> arrayList = new ArrayList<String>();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
arrayList
.add(new String(
"ssssssssssssssssssssssssssssssssssssssssssssssssssss"
+ "sssssssssssssssssssssssssssssssssssssssssssssss"
+ "sssssssssssssssssssssssssssssssssssssssssssssssssss"
+ "sssssssssssssssssssss"));
}
System.out.println((System.currentTimeMillis() - start) + "ms");
System.out
.println(Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
System.out.print("已占用内存:");
System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024
+ "M");
运行结果:
391ms
63M
已占用内存:32M
那么用ArrayList(int initialCapacity)这个呢?
344ms
63M
已占用内存:43M
很明显第二个构造器的效率要比第一个高。
public ArrayList() {
this(10);
}
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
很明显,ArrayList()就是调用的ArrayList(int initialCapacity),初始化10个对象,作为对象数组。
再看看:
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
关键就是这个方法:ensureCapacity(size + 1)
/**
* Increases the capacity of this <tt>ArrayList</tt> instance, if
* necessary, to ensure that it can hold at least the number of elements
* specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
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);
}
}
很明显了,如果不进行初始化长度,再默认10的情况下,大量add时超过10就得增加数组长度了。所以关于ArrayList,在操作之前最好把长度设定,这样对大大提高效率的。
分享到:
相关推荐
import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; /** * @Author Ziph * @date 2020/2/19 * @Email mylifes1110@163.com */ public class TestDemo implemen
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList<String>>等。
集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试
在jni中操作arraylist对象,然后添加一个int型数据进去
ArrayList常用的方法如下: Add 添加到 ArrayList 的結尾處 Remove 從 ArrayList 中移除特定對象的第一個匹配項 RemoveAt 移除 ArrayList 的指定索引處的元素 Insert 將元素插入 ArrayList 的指定索引處 ...
C# Array和ArrayList,List区别
浅析ArrayList内部实现 资源源于不但搜索,自由源于不但努力
ArrayList转化为DataTable数据加载转换方便程序的灵活运用!
day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,长度可以变化 泛型的使用 ...
使用对象ArrayList填充DataGrid,C#源代码ArrayList MyList = new ArrayList();
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
ArrayList。 首先,它不是静态的,编译时每一维度的元素个数不用指定,系统默认元素个数为16,当元素增多并即将大于16时,它会增倍扩容到32,依次规律增长,变小时,相反处理。 其次,元素类型是弱类型,object...
使用数组列表ArrayList填充ListBox
ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象
ArrayList数据批量添加数据,供新手参考
C语言版的ArrayList,具有ArrayList的基本方法增加、插入、删除、自动扩容等。
java.util包中的ArrayList很常用,参考jdk源码中的ArrayList.java,写了一个c版的ArrayList,目前仅坚持 char *(字符串) 和 int (整型).
详细说明ArrayList类的使用方法,掌握ArrayList的技巧!
ArrayList、LinkedList、Vector区别简介。
ArrayList最新源码,基于Jdk1.8