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

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

ArrayList源碼解析(下)

2019-11-10 20:22:19
字體:
供稿:網(wǎng)友

序列化操作,writeObject和readObject

PRivate void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ // Write out element count, and any hidden stuff int expectedModCount = modCount; s.defaultWriteObject(); // Write out size as capacity for behavioural compatibility with clone() s.writeInt(size); // Write out all elements in the proper order. for (int i=0; i<size; i++) { s.writeObject(elementData[i]); } if (modCount != expectedModCount) { throw new ConcurrentModificationException(); }}private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { elementData = EMPTY_ELEMENTDATA; // Read in size, and any hidden stuff s.defaultReadObject(); // Read in capacity s.readInt(); // ignored if (size > 0) { // be like clone(), allocate array based upon size not capacity ensureCapacityInternal(size); Object[] a = elementData; // Read in all elements in the proper order. for (int i=0; i<size; i++) { a[i] = s.readObject(); } }}

迭代器

三個(gè)和迭代器相關(guān)的API,分別為listIterator(int index)、listIterator()和iterator()。 迭代器相關(guān)參考Iterator和ListIterator對(duì)比

public ListIterator<E> listIterator(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("Index: "+index); return new ListItr(index);}public ListIterator<E> listIterator() { return new ListItr(0);}public Iterator<E> iterator() { return new Itr();}

私有類Itr 1. 實(shí)現(xiàn)了Iterator接口 2. cursor表示下一個(gè)將會(huì)返回的元素的下標(biāo),lastRet表示上當(dāng)前元素的下標(biāo) 3. fail-fast機(jī)制:

是java集合(Collection)中的一種錯(cuò)誤機(jī)制。當(dāng)多個(gè)線程對(duì)同一個(gè)集合的內(nèi)容進(jìn)行操作時(shí),就可能會(huì)產(chǎn)生fail-fast事件。例如:當(dāng)某一個(gè)線程A通過iterator去遍歷某集合的過程中,若該集合的內(nèi)容被其他線程所改變了;那么線程A訪問集合時(shí),就會(huì)拋出ConcurrentModificationException異常,產(chǎn)生fail-fast事件。

這里的expectedModCount就是這也道理,具體在checkForComodification()這個(gè)方法里限制

private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element returned; -1 if no such int expectedModCount = modCount; public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { ArrayList.this.remove(lastRet); cursor = lastRet; lastRet = -1; //在上面remove方法后,保持modCount和expectedModCount一致 expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } // 在進(jìn)行迭代操作時(shí),如果同時(shí)又修改了elementData,則拋出異常 final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }}

私有類ListItr 1. 實(shí)現(xiàn)了ListIterator接口 2. 實(shí)現(xiàn)過程和上面的Itr類很相似,就不在贅述。

private class ListItr extends Itr implements ListIterator<E> { ListItr(int index) { super(); cursor = index; } public boolean hasprevious() { return cursor != 0; } public int nextIndex() { return cursor; } public int previousIndex() { return cursor - 1; } @SuppressWarnings("unchecked") public E previous() { checkForComodification(); int i = cursor - 1; if (i < 0) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i; return (E) elementData[lastRet = i]; } public void set(E e) { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { ArrayList.this.set(lastRet, e); } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } public void add(E e) { checkForComodification(); try { int i = cursor; ArrayList.this.add(i, e); cursor = i + 1; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } }}

截取List

截取的subList是原來List的一個(gè)視圖,也就是說對(duì)subList的所有操作會(huì)影響原有的List 小技巧:對(duì)list的某個(gè)區(qū)間內(nèi)的數(shù)據(jù)全部刪除,一般的方法是做循環(huán)遍歷后刪掉,這里就可以利用subList快速刪除。例如: list.subList(200, 300).clear();

這里是API入口

public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, 0, fromIndex, toIndex);}static void subListRangeCheck(int fromIndex, int toIndex, int size) { if (fromIndex < 0) throw new IndexOutOfBoundsException("fromIndex = " + fromIndex); if (toIndex > size) throw new IndexOutOfBoundsException("toIndex = " + toIndex); if (fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");}

私有的SubList類 和之前的代碼大同小異

private class SubList extends AbstractList<E> implements Randomaccess { private final AbstractList<E> parent; private final int parentOffset; private final int offset; int size; SubList(AbstractList<E> parent, int offset, int fromIndex, int toIndex) { this.parent = parent; this.parentOffset = fromIndex; this.offset = offset + fromIndex; this.size = toIndex - fromIndex; this.modCount = ArrayList.this.modCount; } // 這個(gè)操作是針對(duì)原有List的elementData來的,其他如add等操作也是如此 public E set(int index, E e) { rangeCheck(index); checkForComodification(); E oldValue = ArrayList.this.elementData(offset + index); ArrayList.this.elementData[offset + index] = e; return oldValue; } public E get(int index) { rangeCheck(index); checkForComodification(); return ArrayList.this.elementData(offset + index); } public int size() { checkForComodification(); return this.size; } public void add(int index, E e) { rangeCheckForAdd(index); checkForComodification(); parent.add(parentOffset + index, e); this.modCount = parent.modCount; this.size++; } public E remove(int index) { rangeCheck(index); checkForComodification(); E result = parent.remove(parentOffset + index); this.modCount = parent.modCount; this.size--; return result; } protected void removeRange(int fromIndex, int toIndex) { checkForComodification(); parent.removeRange(parentOffset + fromIndex, parentOffset + toIndex); this.modCount = parent.modCount; this.size -= toIndex - fromIndex; } public boolean addAll(Collection<? extends E> c) { return addAll(this.size, c); } public boolean addAll(int index, Collection<? extends E> c) { rangeCheckForAdd(index); int cSize = c.size(); if (cSize==0) return false; checkForComodification(); parent.addAll(parentOffset + index, c); this.modCount = parent.modCount; this.size += cSize; return true; } public Iterator<E> iterator() { return listIterator(); } public ListIterator<E> listIterator(final int index) { checkForComodification(); rangeCheckForAdd(index); final int offset = this.offset; return new ListIterator<E>() { int cursor = index; int lastRet = -1; int expectedModCount = ArrayList.this.modCount; public boolean hasNext() { return cursor != SubList.this.size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= SubList.this.size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (offset + i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[offset + (lastRet = i)]; } public boolean hasPrevious() { return cursor != 0; } @SuppressWarnings("unchecked") public E previous() { checkForComodification(); int i = cursor - 1; if (i < 0) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (offset + i >= elementData.length) throw new ConcurrentModificationException(); cursor = i; return (E) elementData[offset + (lastRet = i)]; } public int nextIndex() { return cursor; } public int previousIndex() { return cursor - 1; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { SubList.this.remove(lastRet); cursor = lastRet; lastRet = -1; expectedModCount = ArrayList.this.modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } public void set(E e) { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { ArrayList.this.set(offset + lastRet, e); } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } public void add(E e) { checkForComodification(); try { int i = cursor; SubList.this.add(i, e); cursor = i + 1; lastRet = -1; expectedModCount = ArrayList.this.modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } final void checkForComodification() { if (expectedModCount != ArrayList.this.modCount) throw new ConcurrentModificationException(); } }; } public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, offset, fromIndex, toIndex); } private void rangeCheck(int index) { if (index < 0 || index >= this.size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } private void rangeCheckForAdd(int index) { if (index < 0 || index > this.size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } private String outOfBoundsMsg(int index) { return "Index: "+index+", Size: "+this.size; } private void checkForComodification() { if (ArrayList.this.modCount != this.modCount) throw new ConcurrentModificationException(); }}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
精品一区二区在线观看视频| 黄色小视频免费观看| 欧美 丝袜 自拍 制服 另类| 色综合咪咪久久网| 一区二区免费播放| 国产目拍亚洲精品99久久精品| 国产成人av一区二区三区| 日韩精品一区二区三区蜜臀| 国产探花在线精品一区二区| 免费成人在线观看视频| 久久精品第九区免费观看| 99九九99九九九99九他书对| 中文字幕中文字幕在线中高清免费版| 精品在线不卡| 爱情岛论坛成人| 老色鬼精品视频在线观看播放| 无限国产资源| 国产免费无码一区二区| 男人添女荫道口喷水视频| 岛国视频免费在线观看| 成人性视频免费看| 欧美精品激情blacked18| 欧美日韩精品专区| 中文字幕一区电影| 国产精品免费看一区二区三区| www.xxx国产| 国产乱码字幕精品高清av| 波多野结衣爱爱| 久久国产精品露脸对白| 最新版天堂中文在线官网| www浪潮av99com| 天堂av中文字幕| 黄色一级影院| 免费日韩一区二区| 亚洲精品欧美激情| 精品中文字幕一区二区小辣椒| 欧美精品生活片| 国产亚洲精品久久久久婷婷瑜伽| 国产在亚洲线视频观看| 性生活在线视频| 免费网站在线观看视频| 最新日韩av| 久久久久99精品成人片| 欧洲国产伦久久久久久久| 亚洲欧美日韩精品久久久| 国产成人精品av在线| 亚洲欧美成人在线| 在线观看91精品国产入口| 久久久久久夜精品精品免费| 久久久精品免费观看| 日韩在线观看视频一区二区三区| a视频网址在线观看| www.毛片.com| 欧美 日韩 国产在线| 欧美亚洲午夜视频在线观看| 久久精品人人做| 成人毛片av在线| 久久精品夜色噜噜亚洲aⅴ| 久久蜜臀中文字幕| 51社区在线成人免费视频| 国产伦精品一区二区三区精品视频| 久久影视免费观看| 91精品国产日韩91久久久久久| 高h视频在线观看| 日韩在线激情| 免费高清在线观看| 日韩人妻精品一区二区三区| 欧美视频导航| 成年人免费看的视频| 成年大片免费视频播放二级| 国产成人无码www免费视频播放| 日韩在线 中文字幕| 91网站最新地址| 成人毛片免费看| 成人免费观看49www在线观看| 国产欧美日韩视频| 成人欧美一区二区三区1314| 亚洲精品日韩一| 午夜精品免费在线观看| 99视频在线观看一区三区| 欧美1o一11sex性hdhd| 日韩电影在线观看网站| 欧美视频在线观看一区二区三区| 欧美理论电影在线精品| 日韩在线一区二区| 国产系列电影在线播放网址| 亚洲午夜在线观看视频在线| www.成人在线.com| 美女黄色丝袜一区| 成人动漫一区| 欧美日韩成人一区二区三区| 久久精品国产2020观看福利| www.午夜色大片| 欧美性生活大片视频| 大陆av在线播放| 国产区一区二区三区| 欧洲精品毛片网站| 性视频在线播放| 久久国产视频精品| 盗摄精品av一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 在线视频欧美精品| 日韩欧美三级| 完全免费av在线播放| 国产精品一区二区黑丝| 午夜在线观看91| 日本三级欧美三级| 国产在线精品国自产拍免费| 国产一区二区三区免费视频| 亚洲免费av高清| 中文字幕一区二区三区四区视频| 在线成人免费av| 亚洲高清视频的网址| 国产男女免费视频| 亚洲精选av在线| 国产免费无码一区二区视频| 黄网站在线观看高清免费| 成人精品视频一区二区三区尤物| 蜜桃视频www网站在线观看| 国产精品成人久久久久| 三级小说一区| 精品国产乱码久久久久久樱花| 水蜜桃精品av一区二区| 91短视频在线| 男女啪啪网站视频| 99热免费精品在线观看| 国产极品美女高潮无套久久久| 亚洲天堂成人在线视频| 男人的天堂va在线| av三级在线观看| 精品影院一区二区久久久| 国产伊人久久| 欧美精品a∨在线观看不卡| 一级做a爰片久久| www一区二区www免费| 日韩.欧美.亚洲| 超碰精品一区二区三区乱码| 久久五月婷婷丁香社区| 不卡一卡二卡三乱码免费网站| 国产黄a三级三级三级av在线看| 中文字幕在线乱| 久久国产精品亚洲va麻豆| 国产欧美日韩综合精品| av资源种子在线观看| 色偷偷9999www| 91精品国产综合久| 国内精品伊人| 污的视频网站| 国产精品网在线观看| 日韩欧美精品电影| 99热最新在线| 中文字幕欧美日韩va免费视频| 国模精品视频一区二区三区| 性少妇videosexfreexxx片| 中文另类视频| 日本伊人精品一区二区三区观看方式| 国产人妖一区二区| 国产私拍福利精品视频二区| 日韩一区二区精品葵司在线| 欧美精品少妇videofree| 日韩麻豆第一页| va天堂va亚洲va影视| 欧美老女人性视频| 亚洲黄色片网站| 欧美三级午夜理伦三级中文幕| jizzjizz免费大全| 岳张嘴把我的精子吞下去| 欧美午夜精彩| 亚洲人成77777男人| 日韩理论片在线观看| 女同另类激情重口| 国产丝袜一区二区三区| 视频区小说区图片区| 久草.com| 这里只有精品免费视频| 9191在线观看| 国产亚洲欧美日韩俺去了| 国产精品爽爽爽| 亚洲第一香蕉视频| 黄色大片a级| 久久九九国产| 在线观看美女网站大全免费| 日本高清黄色片| 在线观看国产网站| 日本aⅴ在线观看| 亚洲无码精品一区二区三区| 国产在线精彩视频| 色女孩综合影院| 成人天堂资源www在线| 亚洲欧美中文字幕在线一区| 一区二区三区在线电影| av大片免费看| 国内精品**久久毛片app| 91久久久久久久久久久久久久| 中文字幕av网址| 国产亚洲精品久久久优势| 外国精品视频在线观看| 久久亚洲资源中文字| 青青国产视频| 久久成人精品一区二区三区| 欧美黄色片免费观看| 日韩欧美在线观看一区二区三区| 91精品国自产在线偷拍蜜桃| gogogo免费视频观看亚洲一| 91看片淫黄大片一级在线观看| 1769在线观看| 天天干天天摸天天操| 国产一区二区三区视频在线播放| 久久婷婷国产综合精品青草| 777777777亚洲妇女| 国产激情视频一区二区三区| 免费无码国产v片在线观看| 国产三级按摩推拿按摩| 91精品秘密在线观看| 欧美日韩国产网站| **欧美大码日韩| 日本精品久久久久| 久久久久国产美女免费网站| 欧美aaa大片视频一二区| 免费观看亚洲天堂| 亚洲国产精品无码久久久| 亚洲2区在线| yiren22亚洲综合| 欧美日韩在线播放| 成视频在线免费观看| 亚洲国产精品99久久| japanese色国产在线看视频| 日韩欧美激情视频| 亚洲成人久久久久| 黄色大秀av大片| 午夜精品一区二区三区在线| 欧美凹凸一区二区三区视频| 91传媒免费视频| 免费视频网站在线观看入口| 在线成人直播| 高清中文字幕一区二区三区| 美国av一区二区| 国产午夜在线观看| 欧美四级电影网| 欧美成人在线免费观看| 欧美久久婷婷综合色| 成人性生交大片免费看中文视频| 国产精品一区视频| 欧洲成人一区二区三区| 一级黄色片在线播放| 亚洲视频 中文字幕| 国产在线视频99| 久久综合精品一区| 最近中文字幕免费| 黄色a在线观看| 亚洲精品69| 香蕉视频国产在线| 欧美男男gaygay1069| 3d成人动漫在线| 亚洲品质自拍视频网站| 17c国产在线| 精品黄色免费中文电影在线播放| 99精品国产高清一区二区| 在线中文字幕-区二区三区四区| 国产精品一级二级| 22288色视频在线观看| 欧美中在线观看| 五十度飞在线播放| 国产精品入口麻豆高清| 热久久免费视频| 一级国产黄色片| 亚洲成人av免费观看| 欧洲亚洲在线视频| 欧美亚洲视频一区二区| 国产精品日韩欧美大师| 免费观看亚洲天堂| 77777少妇光屁股久久一区| 午夜精品影院在线观看| 久久99久久99精品免费看小说| 欧美1234区| 91精品国产91久久久久久吃药| 国产麻豆视频一区二区| 都市激情在线视频| 一区二区三区四区免费观看| 欧美成人精品高清在线播放| 欧美成人三级在线播放| 群体交乱之放荡娇妻一区二区| 国产91精品入口17c| 蜜桃视频在线观看一区| 精精国产xxxx视频在线播放| av成人网在线| 999久久久精品一区二区| 亚洲高清久久久久久| 国产欧美一区二区三区在线| 亚洲美女性生活视频| 国产亚洲va综合人人澡精品| 中文字幕在线观看视频网站| 色婷婷久久久久swag精品| 奇米色一区二区三区四区| 中文字幕欧美视频在线| 6080亚洲理论片在线观看| 亚洲三级电影| 国内精品伊人久久久久影院对白| 亚洲精品久久久久久久久| 麻豆视频在线| 欧美精品黑人猛交高潮| 伊人亚洲综合网| 国产精品网站免费| 国产高清亚洲一区| 久久本道综合色狠狠五月| 又黄又湿又爽又免费又色| 色妞色视频一区二区三区四区| 无码人妻av免费一区二区三区| 午夜精品福利电影| 亚洲成人1区| 天天看片中文字幕| 精品夜夜澡人妻无码av| 国产xxx免费观看| 久草福利资源在线视频| 91成品视频入口| 久久精品免费一区二区三区| 欧美少妇另类| 亚洲精品大尺度| 亚洲色图另类小说| re久久精品视频| 从欧美一区二区三区| 欧美人妖视频| 一级性生活免费视频| 91最新在线| 蜜桃视频在线入口www| 无吗不卡中文字幕| 久久久国产高清| 欧美视频专区一二在线观看|