亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

陌兮大魔王帶你深入 學(xué)習(xí)ArrayListA(一)

2019-11-10 20:00:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前引

ArrayList的重要性就不言而喻了,在此鄙人就不多說(shuō)了。本文適合新手閱讀,如果是大神來(lái)訪,還望能夠幫忙發(fā)現(xiàn)小子知識(shí)不足之處,不甚感激。

ArrayList是什么?

ArrayList是什么?不就是容器嗎,裝個(gè)東西而已!如果你是這樣回答的,那問(wèn):它底層到底是什么?你又如何作答?其實(shí)這時(shí)候,我們就因該深入其源碼來(lái)學(xué)習(xí)了。一看到源碼啊,許多新手肯定都是拒絕的。不外乎兩種原因:1、代碼看不懂,2、注釋比代碼更看不懂。所以,鄙人希望,我能給大家獻(xiàn)點(diǎn)薄力,為大家的知識(shí)體系添磚蓋瓦。

ArrayList(JDK1.6)源碼:

其實(shí)很多源碼都不難.而ArrayList的源碼同樣如此?,F(xiàn)在就讓我們走進(jìn)ArrayList的源碼世界(篇幅有限,挑一些常用的來(lái)說(shuō)):進(jìn)入ArrayList的源碼中,首先看到的是這樣一段代碼
PRivate transient Object[] elementData;
private int size;
protected transient int modCount = 0;(來(lái)之父類(lèi)AbstractList,ArrayList不存在)這個(gè)elementData就是用來(lái)存放數(shù)據(jù)的object數(shù)組。size是數(shù)組的大長(zhǎng)度,代表的是ArrayList的所存貯的數(shù)據(jù)的容量。modCount用來(lái)記錄容器被改變的次數(shù)(對(duì)理解沒(méi)什么用,后文不再解釋這個(gè)變量)。然后我們看到的是ArrayList的構(gòu)造器
    public ArrayList(int initialCapacity) {	super();        if (initialCapacity < 0)            throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);	this.elementData = new Object[initialCapacity];    }
    public ArrayList() {	this(10);    }這段代碼是初始化ArrayList用的。從中我們可以看出,實(shí)例ArrayList有兩種方法,而我們不一般不帶參數(shù)的時(shí)候,ArrayList默認(rèn)的大小是10.即產(chǎn)生一個(gè)容量為10的elementData的object數(shù)組。下一段代碼
    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);	}    }這一段是為了確保數(shù)組可以存放下不停增多的數(shù)據(jù),而專(zhuān)門(mén)設(shè)計(jì)的增加數(shù)組的長(zhǎng)度的方法。從中 可以看出實(shí)現(xiàn)思路是:當(dāng)需要存放數(shù)據(jù)到elementData數(shù)組中去的時(shí)候,會(huì)傳入minCapcity(表示該數(shù)組應(yīng)存入的總數(shù)據(jù)量),如果minCapcity大于現(xiàn)在的數(shù)組的長(zhǎng)度,就產(chǎn)生一個(gè)新的數(shù)組,容量為以前的1.5倍+1,如果仍然小于,就直接將容量設(shè)置為minCapcity。然后再將之前存放在原數(shù)組的數(shù)據(jù)復(fù)制到新的數(shù)組中去,就實(shí)現(xiàn)了整個(gè)數(shù)組的擴(kuò)容!看完前置準(zhǔn)備的各種方法之后,可以看操作的方法了:size():
    public int size() {	return size;    }size就是elementData的長(zhǎng)度。
    public boolean isEmpty() {	return size == 0;    }返回size==0的判斷結(jié)果indexOf(Object o):
    public int indexOf(Object o) {	if (o == null) {	    for (int i = 0; i < size; i++)		if (elementData[i]==null)		    return i;	} else {	    for (int i = 0; i < size; i++)		if (o.equals(elementData[i]))		    return i;	}	return -1;    }傳入一個(gè)對(duì)象,返回其索引。 可以看出這個(gè)方法只是將傳入的對(duì)象和elementData中的每個(gè)元素進(jìn)行比較,然后再返回其數(shù)組下標(biāo)號(hào)。找不到的話,就返回-1。contains(Object o)也只是調(diào)用了這個(gè)方法而已。lastIndexOf(Object o):
    public int lastIndexOf(Object o) {	if (o == null) {	    for (int i = size-1; i >= 0; i--)		if (elementData[i]==null)		    return i;	} else {	    for (int i = size-1; i >= 0; i--)		if (o.equals(elementData[i]))		    return i;	}	return -1;    }可以看見(jiàn)lastIndexOf方法和indexOf是如此的相似,只是將遍歷方向改變了一下就又多了一個(gè)方法,哈哈!get(index):
    public E get(int index) {	RangeCheck(index);	return (E) elementData[index];    }
    private void RangeCheck(int index) {	if (index >= size)	    throw new IndexOutOfBoundsException(		"Index: "+index+", Size: "+size);    }set(index,object)
    public E set(int index, E element) {	RangeCheck(index);	E oldValue = (E) elementData[index];	elementData[index] = element;	return oldValue;    }可以發(fā)現(xiàn)很多操作都只是在操作數(shù)組而已!畢竟ArrayList就是數(shù)組。add(o):
    public boolean add(E e) {	ensureCapacity(size + 1);  // Increments modCount!!	elementData[size++] = e;	return true;    }add方法也是如此,只是此處需要判斷是否要擴(kuò)容add(index,object):
    public void add(int index, E element) {	if (index > size || index < 0)	    throw new IndexOutOfBoundsException(		"Index: "+index+", Size: "+size);	ensureCapacity(size+1);  // Increments modCount!!	System.arraycopy(elementData, index, elementData, index + 1,			 size - index);	elementData[index] = element;	size++;    }在某個(gè)位置插入一個(gè)對(duì)象,這段代碼難得也就這就話:System.arraycopy(elementData, index, elementData, index + 1, size - index); 其實(shí)這句好的意思是:將elementData從其第index和后面的元素,復(fù)制到elementData的第index+1和之后的位置,共復(fù)制size-index個(gè)元素,這樣就是實(shí)現(xiàn)了將第index為元素騰空,讓外界傳進(jìn)來(lái)的object占據(jù)這個(gè)寶座。這也是前面擴(kuò)容的時(shí)候使用的是size+1而不是size的原因(確保數(shù)組復(fù)制時(shí)弄的size+1不會(huì)越界)remove(index):
    public E remove(int index) {	RangeCheck(index);	modCount++;	E oldValue = (E) elementData[index];	int numMoved = size - index - 1;	if (numMoved > 0)	    System.arraycopy(elementData, index+1, elementData, index,			     numMoved);	elementData[--size] = null; // Let gc do its work	return oldValue;    }可以發(fā)現(xiàn)和add是差不多的,而且還不許要考慮擴(kuò)容的問(wèn)題。同樣的remove(object)相比起來(lái),就多了一個(gè)判斷該對(duì)象的index在哪,然后直接調(diào)用這個(gè)方法就行了。

總結(jié):

看到這里,想必大家對(duì)ArrayList也算有一個(gè)清晰地認(rèn)知了。同時(shí)也明白了源碼并不是很難,而且觀看源碼可以很好地加深我們對(duì)知識(shí)的理解,理解到底層。這樣的學(xué)習(xí)會(huì)讓我們的知識(shí)變得更加牢靠!由于今天實(shí)在是太晚了,所以沒(méi)有貼上自定義實(shí)現(xiàn)的MyArrayList的代碼(還沒(méi)有寫(xiě)哭),所以今天只能告一段落了,若是大家還覺(jué)得不過(guò)癮,想對(duì)容器有進(jìn)一步的加深的欲望,希望能夠繼續(xù)觀看我的博文。以后的文章我會(huì)逐一地對(duì)LinkedList,Map,Set,Tree等容器進(jìn)行源碼的解析,還希望大家能夠多多支持,謝謝大家!如果有什么問(wèn)題,還希望能夠一起討論,若是有什么不足之處,請(qǐng)一定要告訴我,謝謝大笑
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一本大道久久a久久精品综合| 污污视频在线免费观看| 天堂中文字幕——hd| 国产电影精品久久禁18| 欧美在线观看视频一区二区三区| 免费视频拗女稀缺一区二区| 91女神在线观看| 最好看的中文字幕久久| 国产剧情av麻豆香蕉精品| 91精品国产综合久久婷婷香蕉| 精品少妇一区二区三区在线播放| 91免费国产精品| 999这里只有精品| 久久久国产精彩视频美女艺术照福利| 久久久久久噜噜噜久久久精品| 日韩欧美久久久| 比比资源-先锋影音资源站| 欧美黑人极品猛少妇色xxxxx| 国产农村妇女aaaaa视频| 国产又黄又大又粗视频| 亚洲另类在线制服丝袜| 中文字幕精品—区二区| 国产成人av一区二区三区在线| 日韩毛片在线免费看| 天堂网在线观看国产精品| 国产欧美精品xxxx另类| 国产精品精品国产| 久久国产精品99久久久久久老狼| 91成品视频入口| 久久影院在线观看| 日本在线观看www| 日韩在线视频国产| 中文字幕成人乱码在线电影| 亚洲少妇30p| 亚洲综合第一页| 亚洲天堂免费在线观看视频| 午夜免费久久看| 小视频福利在线| 欧美日韩高清免费| 欧美成人777| 欧美一区二区在线免费播放| 成人video亚洲精品| 草草草视频在线观看| 日本久久久久久久| 俄罗斯精品一区二区| 国产精品视频3p| 国产一区 在线播放| 欧美日韩国产另类不卡| 欧美成人一区二区三区电影| 黄色免费网站在线| 992tv在线影院| 精品一区精品二区| 高清色视频在线观看| 国产麻豆成人传媒免费观看| 日韩成人一区二区三区在线观看| 日韩欧美黄色大片| 国产女同无遮挡互慰高潮91| 高清不卡在线观看av| a免费在线观看| 中文字幕一区二区人妻在线不卡| 动漫3d精品一区二区三区| 欧美成人精品一区二区| 2019最新中文字幕| 中文日韩在线视频| 最新不卡av在线| 久草热视频在线观看| 日韩专区欧美专区| 黄色片免费网址| 国产天堂在线| 99中文字幕| 在线天堂一区av电影| 欧美午夜视频| jizz国产在线观看| 亚洲精品福利网站| 欧美成人午夜精品免费| 热re66久久精品国产99re| 欧美乱大交做爰xxxⅹ性3| 午夜精品美女久久久久av福利| 久久免费小视频| 欧美日韩视频免费观看| va天堂va亚洲va影视| 精品免费国产一区二区三区四区| 成人精品一区二区三区| 色综合咪咪久久网| 国内成人精品| 久久精品国产精品亚洲红杏| 国产树林野战在线播放| 国产精品一区二区三区美女| 中文字幕999| 91精品国产91热久久久做人人| 99久久久精品| 亚洲欧美日韩精品久久亚洲区| jizzjizz中国精品麻豆| 中文字幕超碰在线| 4438全国亚洲精品观看视频| 欧美黑人xx片| 中文在线视频| 成人av国产| 99久久国产综合精品五月天喷水| 桃花岛tv亚洲品质| 先锋影音国产一区| 是的av在线| 91精品91久久久中77777| 日韩成人午夜精品| 天堂久久av| 一菊综合网成人综合网| 永久免费未视频| 国产精品xvideos88| 韩日成人影院| 国产精品一二三视频| 91丨九色丨国产丨porny| 97精品欧美一区二区三区| 欧美一区三区四区| 四虎成人欧美精品在永久在线| av小次郎在线| 欧美人与性动交xxⅹxx| 精品丝袜在线| 亚洲欧美另类小说视频| 翔田千里亚洲一二三区| 91欧美一区二区三区| 中文字幕第80页| 日韩高清中文字幕| 国语自产精品视频在线看一大j8| 四虎影视永久免费在线观看一区二区三区| 97超碰成人| 久久精品国产精品青草色艺| 性欧美18—19sex性高清| 夜夜嗨aⅴ一区二区三区| 亚洲视频精品| 精品国产乱码久久久久久天美| 日韩精品久久久久| 欧美日本韩国一区| 国产成人精品亚洲| 日韩在线观看成人| 天堂在线资源视频| 香蕉视频免费在线| 成人av在线电影| 成人免费高清在线观看| 少妇无码一区二区三区| 91精品久久久久久久久青青| free亚洲| 精品国产乱码久久久久久1区2区| 丰满少妇久久久久久久| 久久久久久免费看| 青青热久免费精品视频在线18| 老牛国产精品一区的观看方式| 国产精品无码久久久久一区二区| 国产精品成人一区二区三区电影毛片| 国产午夜在线播放| 欧洲熟妇精品视频| 中文资源在线官网| 自拍视频在线播放| 日韩精品国产欧美| 欧美日韩一区二区三区视视频| 91丨九色丨尤物| 亚洲美女区一区| 成人偷拍自拍| 国产成人欧美在线观看| 清清草免费视频| 9国产精品午夜| 精品美女视频| 亚洲xx在线| 日本不卡一区二区三区视频| 五月婷婷在线播放| 高清中文字幕mv的电影| 亚洲人成网站在线| 成人无码www在线看免费| 在线观看操人| 91不卡在线观看| 成人精品天堂一区二区三区| 合欧美一区二区三区| 99re6这里有精品热视频| 欧美久久免费观看| 色老综合老女人久久久| 91精品天堂福利在线观看| 九九久久国产| 国产高清自拍视频| 国产精品入口麻豆原神| 成人高清免费在线| 色吊丝在线永久观看最新版本| 人人妻人人澡人人爽人人欧美一区| 国产又粗又长又爽又黄的视频| 国产欧美在线播放| 欧美va久久久噜噜噜久久| 成人三级高清视频在线看| 国产在线久久久| 免费观影入口看日本视频| 国产一区精品视频| 欧美一区二区三区艳史| 国产美女黄色| 国产绿帽一区二区三区| 精品一区二区三区中文字幕老牛| 黄色一级一级片| 亚洲欧洲国产综合| 人妻体内射精一区二区三区| av国产在线观看| 麻豆影视在线播放| 日韩欧美在线视频日韩欧美在线视频| 玛丽玛丽电影原版免费观看1977| 欧美一级淫片免费视频| 国产精品拍天天在线| 国产精品69一区二区三区| 91欧美激情另类亚洲| 中文字幕 国产精品| 日本a级片视频| 999国产精品一区| 精品人妻少妇嫩草av无码| 黄色污网站在线免费观看| av亚洲天堂网| 日韩精品久久久久久久玫瑰园| 欧美日韩综合视频| 日本精品一二三区| 成人网男人的天堂| 91欧美精品成人综合在线观看| 手机在线观看日韩av| 亚洲有码转帖| 亚洲无码精品在线观看| www.黄色av| 玩弄中年熟妇正在播放| 亚洲午夜精品久久久中文影院av| 免费成人深夜蜜桃视频| 国产精品1区2区3区| 精品国产一区二区三区久久久狼| 精品麻豆一区二区三区| 欧美成人中文字幕在线| 欧美日韩在线另类| 91国内揄拍国内精品对白| 精品影院一区二区久久久| 欧美日韩精品是欧美日韩精品| 欧美在线亚洲在线| 最新在线地址| 国产精品三区www17con| 日本黄色免费片| 青青草97国产精品免费观看无弹窗版| 国产欧美日韩综合一区在线观看| 麻豆乱码国产一区二区三区| 超碰97人人干| 久久激情中文| 91精品国偷自产在线电影| 久久久综合久久久| 深田咏美中文字幕| 视频在线观看一区二区三区| 色婷婷色综合| 天堂v在线观看| 成年人视频大全| 三级av免费看| 精品国产电影一区| 日本乱码高清不卡字幕| 久久久青草青青国产亚洲免观| 中文字幕欧美精品日韩中文字幕| 欧美极品色图| 国产日本欧美在线观看| 欧美一区视频在线| 亚洲三区在线| 国产久一道中文一区| 亚洲免费影视| 日本黄色大片视频| 国产在线拍揄自揄视频不卡99| 国产精选一区| 45www国产精品网站| 日本肉肉一区| 亚洲欧美在线视频免费| 亚洲春色h网| 美女搡bbb又爽又猛又黄www| 精品麻豆剧传媒av国产九九九| 久久国产精品久久久久久| 成人午夜免费视频| 久久国产精品99国产| 色老板视频在线观看| 一区二区三区在线观看国产| 亚洲xxxx3d动漫| 亚洲欧美春色| av网站免费在线看| 伊人伊成久久人综合网小说| xxxxbbbb欧美| 在线观看一区欧美| 男人艹女人网站| 综合干狼人综合首页| 99re在线国产| 久久精品在这里| 亚洲电影欧美电影有声小说| 天天操天天操天天操天天操天天操| 免费在线观看a级片| 成人精品水蜜桃| 欧美激情成人在线视频| 亚洲欧美日本一区二区| 推川ゆうり中文亚洲二区| 69精品人人人人| 成人免费网址在线| 欧美一级电影久久| 国产啪精品视频| 中文字幕一区二区三区免费看| 性欧美video另类hd尤物| 久久精品久久久久| 亚洲电影观看| 中文字幕色av一区二区三区| 亚洲国产日韩在线一区模特| 超碰97人人射妻| 六月婷婷综合网| 成人黄色一区二区| 亚洲精品.www| 国产精品亚洲a| 亚洲国产成人午夜在线一区| 中文字幕电影av| 国产欧美综合一区二区三区| 欧美一级淫片免费视频黄| 日韩欧美你懂的| 日韩情爱电影在线观看| 国产农村妇女精品一区二区| 久久999免费视频| 妺妺窝人体色www婷婷| 国产高清在线视频| 日韩欧美高清一区| 天堂资源在线亚洲视频| 成人在线观看免费播放| 欧美日韩国产成人高清视频| 在线观看免费视频一区| 精品无人区卡一卡二卡三乱码免费卡| 全部孕妇毛片丰满孕妇孕| 午夜av区久久| 国产在线天堂www网在线观看| 精品国产麻豆免费人成网站| 牛牛电影国产一区二区| 深夜福利视频一区| 国产精品一线二线三线| 欧美在线你懂得| 在线免费av观看| 成人短视频在线观看免费|