Advertisement

Arsenal----源码分析

阅读量:
源码中的简介:

实现了可变长度数组的设计方案,并支持一系列可选列表的操作功能以及包含空值的数据元素存储能力。值得注意的是,在功能上与Java中的List接口存在差异,并类似于Vector类的不同步特性。该类提供的基本查询(如大小判断)、空查(isEmpty)、数据访问(get)、数据更新(set)以及迭代器功能均可在恒定时间复杂度内完成;插入运算的时间复杂度属于软O(n)范畴;而其他诸如删除等运算则需线性时间完成;相较于基于链表结构的设计方案而言,在平均情况下的性能表现更为优异;每个ArrayList实例都有一个容量参数,在设计上始终保证其数值不低于当前实际存储的数据数量

每当向ArrayList中加入一个元素时, 其容量会自动地扩展. 除了新元素的平均摊销时间为恒定之外, 该过程的具体容量扩展策略并未详述. 应用程序若希望预先预留足够的内存空间, 可考虑在批量插入大量数据之前调用ensureCapacity方法, 这可能有效提升ArrayList的空间利用效率. 这一实现过程并非同步式的.

当多个线程同时访问同一个ArrayList实例时,并且其中任何一个线程进行了数据上的更改(包括添加、删除或调整内部数组大小),则必须在外层进行同步处理。
数据上的更改通常指添加、删除一个或多个元素的行为;而仅更改元素值则不被视为数据上的更改。
实现这一目标的一种常见方法是对那些经过自然封装的数据容器(如链表、队列等)进行同步操作。
当无法直接获取这些对象时,则可以使用集合类型对数据容器进行包装。

全部评论 (0)

还没有任何评论哟~