日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學(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(); } }}

迭代器

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

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表示下一個將會返回的元素的下標(biāo),lastRet表示上當(dāng)前元素的下標(biāo) 3. fail-fast機(jī)制:

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

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

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)行迭代操作時,如果同時又修改了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的一個視圖,也就是說對subList的所有操作會影響原有的List 小技巧:對list的某個區(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; } // 這個操作是針對原有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ā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
最近中文字幕日韩精品| 欧美日韩免费视频| www.av中文字幕| 中文字幕日韩国产| 亚洲一区在线观看网站| 欧美99久久| 日韩精品中文在线观看| 欧美 日韩 中文字幕| 日韩精品在线私人| 国产在线黄色片| 国产在线小视频| 中文字幕在线视频网| 中文字幕精品一区二| 欧美日韩第一区日日骚| 婷婷中文字幕一区| 日韩一级精品| 一区二区三区精品99久久| 91一区二区| av亚洲免费| 欧美日韩国产一区在线| 免费看日韩精品| 在线视频国内一区二区| 色欧美日韩亚洲| 二区三区不卡不卡视频| 亚洲国产福利视频| 国产高清一区| 日韩高清在线一区二区| 91吃瓜在线观看| 精品国产1区二区| 午夜视频在线观看一区| 久草亚洲一区| 日韩一级二级三级| 日韩欧美国产高清| 在线观看国产一级片| 精品欧美不卡一区二区在线观看| 国产高清在线视频| 午夜亚洲一区| www在线播放| 久久久久久欧美| 日韩不卡在线观看| 在线欧美一级视频| 久草视频观看| 人成在线免费视频| 在线视频不卡一区二区| 日韩在线中文视频| 黄色片免费看| 欧美精品一区二区三区在线播放| 黄污视频在线看| 免费在线观看国产黄| 亚洲第一视频在线观看| 精品国产免费视频| 日韩在线中文视频| 亚洲第一页中文字幕| 精品视频在线导航| 色屁屁一区二区| 亚洲福利精品| 97视频在线| 欧美另类久久久品| 亚洲一级二级| a视频在线播放| 久久精品日韩欧美| 日本亚洲欧美| 欧美亚洲免费高清在线观看| 日韩午夜中文字幕| 国产在线看一区| 蜜桃久久久久| 精品久久人人做人人爽| 国产视频97| 国产羞羞视频在线播放| 综合激情一区| 国产1区在线| 欧美婷婷久久| 欧美亚洲国产日韩2020| 欧美日韩三级视频| 国产在线www| 99久久www免费| 亚洲一区在线视频观看| 亚洲人成欧美中文字幕| 91精品在线免费观看| 国产一级在线播放| 99视频一区| 在线精品日韩| 中文字幕亚洲二区| 国产99在线|亚洲| 日韩欧美中文字幕一区| 日韩午夜中文字幕| 欧美另类久久久品| 日韩欧美中文字幕视频| 欧美久久久精品| 色综合天天综合网天天狠天天 | 三级网站免费观看| 久久精品夜夜夜夜久久| 69堂精品视频在线播放| 老司机久久99久久精品播放免费| 伊人国产视频| 精品国产网站在线观看| www.日韩免费| 91精品久久久久| 伊人网站在线| 亚洲va中文字幕| 蜜桃精品视频| 日韩精品视频在线观看免费| 日韩精品在线中文字幕| 日韩精品在线免费观看| 阿v免费在线观看| 亚洲v中文字幕| 91精品国产色综合久久久蜜香臀| 亚洲免费看av| 日韩亚洲欧美中文三级| 在线免费播放av| 91精品久久久久| 国产在线视频一区二区| 久久99精品久久久久婷婷| 美国av一区二区| 日韩精品a在线观看91| 白嫩少妇丰满一区二区| 99这里有精品视频| 中文字幕精品亚洲| 亚洲高清免费一级二级三级| 日韩国产在线观看一区| 精品国产乱码久久久久久牛牛| 日韩欧美在线网址| 国产99在线|亚洲| 99精品一级欧美片免费播放| 天堂在线中文| 欧美日韩在线视频免费观看 | 精品亚洲成a人片在线观看| 中文字幕 日韩 欧美| 欧美 日韩 国产在线| 国产丝袜一区二区| 欧美一卡2卡三卡4卡5免费| 日韩欧美一卡二卡| 中文字幕精品视频| 日韩精品在线中文字幕| 精品国产欧美日韩不卡在线观看| 日韩午夜一区| 中文字幕99| 91精品国产调教在线观看| 久久久久久久久99精品| 不卡一二三区| 成人无遮挡免费网站视频在线观看| 久久精品夜夜夜夜久久| 二区视频在线观看| 日韩免费久久| 91精品婷婷国产综合久久| 最近中文字幕在线中文高清版| 91精品国产91久久久久久久久 | 国产欧美日韩三级| www.精品视频| 国产999在线观看| 精品视频资源站| 成人精品视频一区| 91蜜桃在线视频| 亚洲免费视频一区| 精品一二线国产| 精品福利二区三区| 精品国产1区二区| 国产精品福利视频一区二区三区| 中文欧美字幕免费| 在线三级av| 国产激情在线观看| 国产小视频在线观看免费| 一区二区不卡视频| 99在线精品视频免费观看20| 成片免费观看| 丰满少妇一区| 欧美高清一级片在线| 中文字幕伊人| 国产成人综合精品| 欧美中文字幕在线观看视频| 婷婷中文字幕一区三区| 一二三区精品视频| 精品熟女一区二区三区| 色www精品视频在线观看| 不卡在线视频| 日韩一级免费视频| 亚洲中文字幕一区| 精品久久久久久无| 国产成人精品三级| 日韩三级精品电影久久久| 欧美国产一级片| 欧美中文字幕第一页| 一区二区三区精品在线| 一本久久a久久精品亚洲| 中文字幕亚洲第一| 成人h视频在线观看| 黄污视频在线看| 欧美一级在线观看| 中文字幕 欧美 日韩| 中文字幕欧美日韩va免费视频| 国产在线黄色片| 中文字幕久精品免费视频| 欧美日韩国产中文| 伊人国产视频| 国产婷婷色一区二区三区在线| 91精品观看| 中文字幕亚洲一区在线观看| 亚洲一区视频在线观看视频| 91极品视频在线观看| 91精品国产91久久久久久不卡| 最近高清中文在线字幕在线观看| 成人无遮挡免费网站视频在线观看| 久久久另类综合| 亚洲第一中文字幕在线观看| 99色在线视频| 欧美亚洲专区| 一级片免费网站| 日韩视频精品在线观看| 中文字幕视频一区二区三区久| 国产激情在线观看| 欧美国产综合在线V| 欧美日韩国产中文| 日韩在线一区二区| 激情综合色综合久久| 日韩一级免费视频| 不卡在线一区二区| 国产丝袜在线播放| 亚洲视频电影在线| 国产欧美日韩中文字幕| 日韩 欧美 综合| 亚洲乱码中文字幕| 美女尤物久久精品| 精品av中文字幕在线毛片| 91精品国产综合久久香蕉最新版| 欧美日韩精品不卡| 亚洲黄页一区| 99pao成人国产永久免费视频| 日韩欧美一二三区| 精品中文字幕视频| 欧美在线视频一区二区| 欧美色视频一区二区三区在线观看 | 99精品在线播放| 黄色一区二区在线| 91精品国产色综合久久久蜜香臀 | 天天综合天天添夜夜添狠狠添| 日韩欧美国产免费播放| 欧美日韩国产一级片| 日本a口亚洲| 日韩 欧美 亚洲| 在线观看国产一区| 日韩视频免费直播| 亚洲理论中文字幕| 不卡一二三区| 欧美日韩在线第一页| 91精品国产91久久久久青草| 国产亚洲短视频| 国产香蕉免费精品视频| 亚洲一区中文字幕在线观看| 欧美日韩第一区日日骚| 日韩高清在线一区二区| 国产在线看一区| 亚洲黄色www| 二区视频在线观看| 亚洲三级免费看| 国产日韩av一区| 九九在线精品| 国产高清在线视频| 精品国产乱码一区二区| 欧美日韩中文字幕精品| 香蕉精品久久| 亚洲一区导航| 国产高清精品在线| 亚洲一区在线观看网站| 日韩专区中文字幕| 日韩亚洲欧美中文字幕| 麻豆一区二区99久久久久| 国产在线不卡一区| 一二三区精品视频| 69av亚洲| 一区二区三区精品99久久| 国产h片在线观看| 国产日韩在线视频| 91精品国产自产在线观看永久∴| 国产不卡视频在线| 91精品在线观看国产| 欧美日韩精品免费在线观看视频| 日韩视频一区二区在线观看| 精品国产99久久久久久| 91精品国产综合久久香蕉最新版 | av一区在线观看| 日韩欧中文字幕| 国产九九在线| 在线免费视频一区二区| а√天堂8资源中文在线| 欧美不卡一二三| 日韩精品免费视频一区二区三区| 久久99久久99精品中文字幕| 久久精品一二三| 日韩视频在线观看视频| 色一区在线观看| 精品视频www| 日韩精品视频在线观看免费| 国产一级片网站| 欧美不卡123| 国产乱国产乱300精品| 欧美日韩视频免费播放| 精品国产网站在线观看| 久久久精品国产免费观看同学| 日韩欧美一级二级三级久久久| 欧美日韩91| 色偷偷一区二区三区| 日韩高清不卡一区| 亚洲经典中文字幕| 中文字幕在线视频久| 日韩欧美国产高清91| 欧美三级日本三级少妇99| 日韩免费不卡avV| 日韩 国产 一区| 精品乱子伦一区二区| 国产一级片在线| av免费在线观看网址| 在线不卡一区二区| 中文字幕精品在线| av免费观看网站| 日韩国产成人精品| 99在线精品视频免费观看20| 日韩欧美在线精品| 国产91久久久久| 国产日产一区二区| 国产在线拍偷自揄拍精品| 精品极品三级久久久久| 91精品久久久久久蜜臀| 中文在线一区二区| 91精品国产91综合久久蜜臀| 日韩欧美中文字幕精品| 欧美日韩在线视频免费观看 | 中文字幕亚洲字幕| 日韩国产在线不卡视频| 国产偷久久久精品专区| 国产又粗又猛又爽又黄91精品| 国产字幕中文| 亚洲福利在线看| 在线一区免费| 日韩亚洲欧美中文字幕| 亚洲一级影院| 午夜一区二区视频| 中文字幕综合在线| 三级精品视频| 中文字幕五月欧美| 欧美日韩国产黄色| 欧美中文字幕精品| 91精品国产99| 中文精品视频| 欧美日韩久久久| 久久精品一级爱片| 视频一区不卡| 天天综合天天做| 日韩欧美在线中字| 日韩在线 中文字幕| 国产日韩在线亚洲字幕中文| 欧美日韩综合视频| 精品三级av| 在线不卡一区二区| 欧美三级网址| 精品国产99| 天天综合天天| 欧美久久久网站| 日韩激情一区| 日韩欧美色综合网站| 日韩不卡中文字幕| 天天在线视频色| www.久久草| 97久久精品午夜一区二区| 午夜一区二区三区视频 | 国产在线二区| 亚洲一区在线观看网站| 欧美日韩在线视频一区| www中文字幕| 欧美,日韩,国产在线| 国产婷婷一区二区| 欧美中文字幕在线| 国产日韩综合| 亚洲欧美中文字幕在线观看| 日韩视频专区| 久久久精品国产99久久精品芒果| 久久久久久久久99精品| 亚洲精品中文字幕乱码三区不卡| 国产在线二区| 久久婷婷中文字幕| 日韩视频在线一区二区| 国产小视频在线| 中文字幕欧美在线| 国产黄色一区| 亚洲影视资源网| 91精品999| 在线观看免费国产小视频| 国产午夜精品全部视频播放| 1024国产在线| 激情婷婷亚洲| 一区二区三区免费看视频| 国产成人一二三区| 免费在线视频一区二区| 又黄又www的网站| 国产欧美一级| 精品久久久视频| 精品视频www| 一区二区三区精品在线| 中文字幕第一页在线播放| 中文字幕精品国产| 欧美日韩精品免费|