ArrayList的用法

来源:互联网 发布:西沙海战知乎 编辑:程序博客网 时间:2024/04/29 17:00

    上一篇我们提到了利用ArraylistHashtable进行排序,下面我们就对ArrayList进行一个简单的了解。因为没

深入实践过,所以下面都是一些基本的绍,只是为没有接触过ArrayList的人提供一个思路,大牛们可以略过了。


Capacity和Count的区别:

     Capacity是ArrayList可以存储的元素数。Count是ArrayList中实际包含的元素数。Capacity总是大于或等于  

Count。如果在添加元素时,Count超过Capacity,则该列表的容量会自动加倍扩充。如果Capacity的值显式设置,则

内部数组也需要重新分配以容纳指定的容量。如果Capacity被显式设置为0,语言运行库将其设置为默认容量。

默认容量为16。在调用Clear后,Count为0,而此时Capacity确是默认容量16,而不是0。

 

数组扩容

    这是对ArrayList效率影响比较大的一个因素。每当执行Add、AddRange、Insert、InsertRange等添加元素的方

法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到

新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。比如,一个可能有200个元素

的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将经过:16*2*2*2*2 = 256四次的扩容才会满足最

终的要求,那么如果一开始就:ArrayList List = new ArrayList( 210 );的方式创建ArrayList,不仅会减少4次数

组创建和Copy的操作,还会减少内存使用。

 

循环效率

    频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失。

    首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用

IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作

优化来的快,如果有这方面的要求,建议使用Hashtable等键值对的集合。

 总结:

    ArrayList和Hashtable都是存储数据的容量,了解它们的各自的特点,根据需求选择合适的容器,这样不仅可以

提高开发的效率也能增加系统的灵活性。


3 0
原创粉丝点击