【集合框架知识总结】ArrayList 中 ensureCapacity 使用
2018-03-27 15:21
288 查看
ensureCapacity方法源码:
根据传入的值进行扩容 默认的扩容规则为 old*1.5+1
ensureCapacity使用场景
for (int i = 1; i < 10000000; i++) {
list.add(new Object());
}list 在 16,25,38,58,88,133,200,301..........大小处进行扩容操作(拷贝操作+新增容量),这样频繁的操作会很影响其插入效率。
ensureCapacity使用对比
所以在项目中有些业务处理时候对ArryList的长度有明显的把控时 最好自定义其扩容方法来提高程序的执行效率。
/** * 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); } }
根据传入的值进行扩容 默认的扩容规则为 old*1.5+1
ensureCapacity使用场景
private static final int DEFAULT_CAPACITY = 10; //ArrayList 初始容量(不是指new ArryList().size())假如要对一个ArrayList要插入大量的数据 类似下面这种: ArrayList<Object> list = new ArrayList<Object>();
for (int i = 1; i < 10000000; i++) {
list.add(new Object());
}list 在 16,25,38,58,88,133,200,301..........大小处进行扩容操作(拷贝操作+新增容量),这样频繁的操作会很影响其插入效率。
ensureCapacity使用对比
@Test public void ensureCapacityTest() { long startTime = System.currentTimeMillis(); ArrayList<Object> list1 = new ArrayList<Object>(); for (int i = 1; i < 10000000; i++) { list1.add(new Object()); } System.out.println(System.currentTimeMillis() - startTime); //3765 long startTime2 = System.currentTimeMillis(); ArrayList<Object> list2 = new ArrayList<Object>(); list2.ensureCapacity(10000000); for (int i = 1; i < 10000000; i++) { list2.add(new Object()); } System.out.println(System.currentTimeMillis() - startTime2); //813 }可以看出来在ArryList数据长度和数据量过大的情况下初始化理想的ArryList容积的效率明显高于自动扩容
所以在项目中有些业务处理时候对ArryList的长度有明显的把控时 最好自定义其扩容方法来提高程序的执行效率。
相关文章推荐
- 集合框架使用总结
- 总结:集合框架(LinkedList,ArrayList,HashSet)
- 集合框架使用总结
- 集合框架使用总结
- 集合框架使用总结
- 集合框架使用总结
- 黑马程序员 Java基础知识总结-j集合框架
- 集合框架使用总结
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
- 集合框架使用总结
- 黑马程序员_【总结】_集合框架知识梳理1
- 黑马程序员_Java第17天知识总结_集合框架的工具类_Collections_Arrays_将数组变成list集合_集合变数组_高级for循环_可变参数
- 集合框架使用总结
- 集合框架使用总结
- 集合框架使用总结
- 集合框架使用总结
- 黑马程序员_java基础知识总结(3)集合框架
- 集合框架使用总结
- 集合框架使用总结
- 集合框架使用总结