ArrayList源码学习

Resizable-array implementation of theListinterface. Implements * all optional list operations, and permits all elements, including *null. In addition to implementing theListinterface, * this class provides methods to manipulate the size of the array that is * used internally to store the list. (This class is roughly equivalent to *Vector, except that it is unsynchronized.) * *

可变数组实现了list接口。实现了所有list的运算操作,且允许所有类型元素,包括null。除了实现list接口之外,类提供了调整数组大小方法,用来存储list。该类与Vector基本相同,除了非线程安全。

Thesize,isEmpty,get,set, *iterator, andlistIteratoroperations run in constant * time.  Theaddoperation runs inamortized constant time, * that is, adding n elements requires O(n) time.  All of the other operations * run in linear time (roughly speaking).  The constant factor is low compared * to that for theLinkedListimplementation. * *

size  isEmpty get  set  iterator  listIteratoroperations 算法时间为常量。addoperation运行时间为一个分段常量时间,即添加N个元素需要O(n)时间,所有的其他运算方法是线性时间。常量因素要比linkedList同样方法花费的时间段。

EachArrayListinstance has acapacity.  The capacity is * the size of the array used to store the elements in the list.  It is always * at least as large as the list size.  As elements are added to an ArrayList, * its capacity grows automatically.  The details of the growth policy are not * specified beyond the fact that adding an element has constant amortized * time cost. * *

每个ArrayList对象必设定容量,容量就是存储在list中的数组大小。通常最大为list的最大。当元素添加到ArrayList,他的容量会自增长。

An application can increase the capacity of anArrayListinstance * before adding a large number of elements using theensureCapacity* operation.  This may reduce the amount of incremental reallocation. * *

Note that this implementation is not synchronized.* If multiple threads access anArrayListinstance concurrently, * and at least one of the threads modifies the list structurally, it *mustbe synchronized externally.  (A structural modification is * any operation that adds or deletes one or more elements, or explicitly * resizes the backing array; merely setting the value of an element is not * a structural modification.)  This is typically accomplished by * synchronizing on some object that naturally encapsulates the list. * * If no such object exists, the list should be "wrapped" using the * {@link Collections#synchronizedList Collections.synchronizedList} * method.  This is best done at creation time, to prevent accidental * unsynchronized access to the list:

注意,该实现类是非线程安全的。如果多线程同时访问ArrayList对象,且至少一个线程修改了list的结构,他必须在外部同步。

如果没有该类型存在,列表应该使用Collection的Collections.synchronizedList方法来包装该list。最好在创建时使用,以防止非线程安全访问。如题实例如下:

*  List list = Collections.synchronizedList(new ArrayList(...));

* *

* The iterators returned by this class's {@link #iterator() iterator} and * {@link #listIterator(int) listIterator} methods arefail-fast: * if the list is structurally modified at any time after the iterator is * created, in any way except through the iterator's own * {@link ListIterator#remove() remove} or * {@link ListIterator#add(Object) add} methods, the iterator will throw a * {@link ConcurrentModificationException}.  Thus, in the face of * concurrent modification, the iterator fails quickly and cleanly, rather * than risking arbitrary, non-deterministic behavior at an undetermined * time in the future. * *

Note that the fail-fast behavior of an iterator cannot be guaranteed * as it is, generally speaking, impossible to make any hard guarantees in the * presence of unsynchronized concurrent modification.  Fail-fast iterators * throw {@code ConcurrentModificationException} on a best-effort basis. * Therefore, it would be wrong to write a program that depended on this * exception for its correctness:the fail-fast behavior of iterators

* should be used only to detect bugs.* *

This class is a member of the

* * Java Collections Framework. * * @author  Josh Bloch * @author  Neal Gafter * @see    Collection * @see    List * @see    LinkedList * @see    Vector * @since  1.2


默认容量大小  10 private static final int DEFAULT_CAPACITY = 10;

最大容量 : private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

>> :带符号右移,一般数值减半,正数,高位补零,负数,高位补一,如4>>1 向右移动一位  :0100 -->0010 =2 

负数-4>>1 向右移动一位: 1100--->1010 = -2

初始化有多种方式:

1、指定ArrayList的大小,如 new ArrayList(12)

2、不指定大小,如new ArrayList(),默认会初始化一个空的数组。

3、使用Collection初始化, new ArrayList(new Collection());

转换为Object[]  list.toArray(),这个转换过程是线程安全的,list中数据的引用不会被关联到新的数组中,

注意:允许存入数据为null.

多处使用的系统数组复制工具System.arraycopy(srcArr,srcindex,desArr,desindex,length);

意味着:从原数组中的srcindex开始,到srcindex+length -1,复制数组数据到目的数组的,desArr开始,到desArr+length-1;

如果srcArr与desArr相同,则会将复制的数组暂存到TemArray中。

object.retainAll(new Collection());:删除除了collection中包含的数据之外的其他object中的数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容