当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java中的ArrayList的容量

发表于: 2014-01-14   作者:cuiyadll   来源:转载   浏览次数:
摘要: List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。 ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,
List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。
ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。
每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。



ArrayList是经常会被用到的,一般情况下,使用的时候会像这样进行声明:
List arrayList = new ArrayList();
如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。
可以通过调试看到动态增长的数量变化:10->16->25->38->58->88->...



也可以使用下面的方式进行声明:
List arrayList = new ArrayList(4);
将ArrayList的默认容量设置为4。当ArrayList中的元素超过4个以后,会重新分配内存空间,使数组的大小增长到7。
可以通过调试看到动态增长的数量变化:4->7->11->17->26->...



那么容量变化的规则是什么呢?请看下面的公式:
((旧容量 * 3) / 2) + 1
注:这点与C#语言是不同的,C#当中的算法很简单,是翻倍。



一旦容量发生变化,就要带来额外的内存开销,和时间上的开销。
所以,在已经知道容量大小的情况下,推荐使用下面方式进行声明:
List arrayList = new ArrayList(CAPACITY_SIZE);
即指定默认容量大小的方式。

Java中的ArrayList的容量

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
预备知识: 在项目中由于需要,可能会动态的对一个List进行操作,这里说明ArrayList,他的底层是数
本文来自 smallboy_5的专栏 http://blog.csdn.net/smallboy_5/article/details/2119123 线性表,链
编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合
import java.util.*;//导包 class ArrayListTest { public static void sop(Object obj)//主函数要
http://www.cnblogs.com/huangfox/archive/2010/10/09/1846758.html Java集合类 一、 概述 集合类是
ArrayList简介 ArrayList 是一个数组队列,既动态数组。与Java中的数组相比,它的容量能动态增长。
ArrayList 1.看源码前应该知道的知识点 /** * */ package com.study.collection; import java.util.
在Java中由List实现了两个类——ArrayList和LinkedList。在Java的帮助文档中我们可以看到ArrayList
首先是ArrayList的继承体系,代码如下: Java代码 publicclassArrayList<E>extendsAbstractList
JAVA集合类浅谈: 前言: 集合包是Java中最常用的包 集合包中常用的主要有Collection和Map两个接口
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号