日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java源碼解析之接口List

瀏覽:158日期:2022-08-12 13:44:03
目錄前言一、List特有的方法二、超級實現(xiàn)類AbstractList三、SubList、equals和hascode前言

List接口是Collection接口的三大接口之一,其中的數(shù)據(jù)可以通過位置檢索,用戶可以在指定位置插入數(shù)據(jù)。List的數(shù)據(jù)可以為空,可以重復(fù)。我們來看看api文檔是怎么說的:

Java源碼解析之接口List

一、List特有的方法

我們這里就只關(guān)注和Collection不同的方法,主要有以下這些:

//在指定位置,將指定的集合插入到當(dāng)前的集合中boolean addAll(int index, Collection<? extends E> c);//這是一個默認實現(xiàn)的方法,會通過Iterator的方式對每個元素進行指定的操作default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); final ListIterator<E> li = this.listIterator(); while (li.hasNext()) {li.set(operator.apply(li.next())); }}//排序,依據(jù)指定的規(guī)則對當(dāng)前集合進行排序,可以看到,排序是通過Arrays這個工具類完成的。default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator<E> i = this.listIterator(); for (Object e : a) {i.next();i.set((E) e); }}//獲取指定位置的元素E get(int index);//修改指定位置元素的值E set(int index, E element);//將指定元素添加到指定的位置void add(int index, E element);//將指定位置的元素移除E remove(int index);//返回一個元素在集合中首次出現(xiàn)的位置int indexOf(Object o);//返回一個元素在集合中最后一次出現(xiàn)的位置int lastIndexOf(Object o);//ListIterator繼承于Iterator,主要增加了向前遍歷的功能ListIterator<E> listIterator();//從指定位置開始,返回一個ListIteratorListIterator<E> listIterator(int index);//返回一個子集合[fromIndex, toIndex),非結(jié)構(gòu)性的修改返回值會反映到原表,反之亦然。//如果原表進行了結(jié)構(gòu)修改,則返回的子列表可能發(fā)生不可預(yù)料的事情List<E> subList(int fromIndex, int toIndex);

通過對上面方法的研究,我們不難發(fā)現(xiàn),collection接口主要提供一些通常的方法,而List接口則針對線性表的結(jié)構(gòu),提供了對位置以及字表的操作。

二、超級實現(xiàn)類AbstractList

我們先看看源文檔是怎么來說AbstractList的,要實現(xiàn)一個不可修改的集合,只需要復(fù)寫get和size方法。如果要實現(xiàn)一個可以修改的集合,還需要復(fù)寫set方法,如果要動態(tài)調(diào)整大小,就必須實現(xiàn)add和remove方法。

接下里我們一起來來看看源碼吧!

//在AbstractCollection中,add方法默認會拋出異常,//而在這里是調(diào)用了add(int index, E e)方法,但這個方法也是沒有實現(xiàn)的。//這里默認會把元素添加到末尾。public boolean add(E e) { add(size(), e); return true;}//同上,這個只需要進行一次遍歷即可public boolean addAll(int index, Collection<? extends E> c) { //... }

接下里我們在繼續(xù)看看其他幾個方法,這幾個是與Iterator和ListIterator息息相關(guān)的,在AbstractList中有具體的實現(xiàn),我們先來看看它是如何把集合轉(zhuǎn)變成Iterator對象并支持foreach循環(huán)的吧。

我們通過源碼發(fā)現(xiàn):在Iterator方法中,是直接返回一個 Itr對象

public Iterator<E> iterator() { return new Itr();}

其實我們很快也就會明白,它是實現(xiàn)了一個內(nèi)部類,這個內(nèi)部類實現(xiàn)了Iterator接口,合理的處理hasNext、next、remove方法。這個源碼就不粘貼啦,其中僅僅在remove時考慮了一下多線程問題,有興趣的可以自己去看看。

我們來看看另一個吧?ListIterator吧他也是通過一個內(nèi)部類是實現(xiàn)的

public ListIterator<E> listIterator() { return listIterator(0);}

public ListIterator<E> listIterator(final int index) { rangeCheckForAdd(index); return new ListItr(index);}

事實證明,和我們想的一樣,AbstractList內(nèi)部還定義了一個ListItr,實現(xiàn)了ListIterator接口,其實現(xiàn)也很簡單,就不粘貼源碼啦。

接下倆讓我們來看看AbtractList是怎么利用這兩個類來做事情的

//尋找一個元素首次出現(xiàn)的位置,只需要從前往后遍歷,找到那個元素并返回其位置即可。public int indexOf(Object o) { ListIterator<E> it = listIterator(); if (o==null) {while (it.hasNext()) if (it.next()==null)return it.previousIndex(); } else {while (it.hasNext()) if (o.equals(it.next()))return it.previousIndex(); } return -1;}//同理,尋找一個元素最后一次出現(xiàn)的位置,只需要從列表最后一位向前遍歷即可。//看到listIterator(int index)方法是可以傳遞參數(shù)的,這個我想我們都可以照著寫出來了。public int lastIndexOf(Object o) { //...}//這個方法是把從fromIndex到toIndex之間的元素從集合中刪除。//clear()方法也是調(diào)用這個實現(xiàn)的(我認為clear實現(xiàn)意義并不大,因為在其上級AbstractCollection中已經(jīng)有了具體實現(xiàn))。protected void removeRange(int fromIndex, int toIndex) { ListIterator<E> it = listIterator(fromIndex); for (int i=0, n=toIndex-fromIndex; i<n; i++) {it.next();it.remove(); }}

在接下來讓我們來說一說兩個比較重要的內(nèi)容一個是關(guān)于SubList,另一個是關(guān)于equals和hascode的。

三、SubList、equals和hascode

SubList并不是新建了一個list,只是持有當(dāng)前集合的引用,然后控制了用戶可以操作的范圍,所以在接口定義時就說明了其更改會直接反應(yīng)到原集合中。SubList是定AbstractList內(nèi)部,并且是AbstractList的基礎(chǔ)上增加了對可選范圍的控制。

而equals和hascode的實現(xiàn),也關(guān)乎我們的使用。在AbstractList中,這兩個方法不僅與其實例有關(guān),也和其內(nèi)部包含的元素有關(guān),所以在定義數(shù)據(jù)元素時,也應(yīng)該復(fù)寫這兩個方法,以保證程序的正確運行。這里看下其源碼加深一下印象吧。

public boolean equals(Object o) { if (o == this)return true; if (!(o instanceof List))return false; ListIterator<E> e1 = listIterator(); ListIterator<?> e2 = ((List<?>) o).listIterator(); while (e1.hasNext() && e2.hasNext()) {E o1 = e1.next();Object o2 = e2.next();//這里用到了數(shù)據(jù)元素的equals方法if (!(o1==null ? o2==null : o1.equals(o2))) return false; } return !(e1.hasNext() || e2.hasNext());}

public int hashCode() { int hashCode = 1; for (E e : this)//這里用到了數(shù)據(jù)元素的hashCode方法hashCode = 31*hashCode + (e==null ? 0 : e.hashCode()); return hashCode;}

到此這篇關(guān)于Java源碼解析之接口List的文章就介紹到這了,更多相關(guān)Java接口List內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品韩国| 亚洲黄色中文字幕| 日韩亚洲国产欧美| 久久蜜桃精品| 91成人超碰| 亚洲色图网站| 久久精品99久久久| 久久香蕉网站| 久久精品播放| 亚洲香蕉久久| 亚洲精品日本| 久久gogo国模啪啪裸体| 国产一区二区久久久久| 日韩av一级| 免费在线看一区| 国产日韩欧美一区| 日韩免费高清| 蜜臀久久久99精品久久久久久| 日韩精品91亚洲二区在线观看| 美女av一区| 亚洲激情不卡| 免费在线亚洲欧美| 婷婷激情综合| 国产欧美日韩在线一区二区| 日韩欧美午夜| 国产婷婷精品| 国产精品成人**免费视频 | 激情黄产视频在线免费观看| 欧美日韩高清| 久久亚洲国产| 久久精品国产99| 免费国产自久久久久三四区久久| 亚洲自啪免费| 国产精品magnet| 亚洲精品在线影院| 四虎精品永久免费| 国产69精品久久| 久久国产精品亚洲77777| 日韩一区二区三区高清在线观看| 狠狠久久伊人中文字幕| 99精品99| 国产在线日韩精品| 久热精品在线| 免费福利视频一区二区三区| 91精品日本| 91久久中文| 在线天堂资源www在线污| 日韩国产91| 午夜欧美精品久久久久久久| 成人台湾亚洲精品一区二区 | 亚洲精品黄色| 99久久99视频只有精品 | 国产精品欧美在线观看| 午夜精品免费| 97精品在线| 国产美女久久| 伊人精品久久| 欧美特黄一区| 蜜桃成人精品| 精品中文字幕一区二区三区 | 午夜亚洲精品| 欧美aa在线观看| 国产调教精品| 亚洲精品看片| 亚洲一区国产| 不卡中文字幕| 成人久久一区| 视频在线不卡免费观看| 久久精品97| 亚州国产精品| 老色鬼久久亚洲一区二区| 国产综合激情| 日韩在线精品| 国产在线视频欧美一区| 欧美在线看片| 日韩高清电影免费| 日本不卡一区二区| 奶水喷射视频一区| 尤物在线精品| 欧美美女一区| 欧美日韩国产综合网| 久久一级电影| 激情综合自拍| 亚洲精品va| 国产精品腿扒开做爽爽爽挤奶网站| 欧美日韩国产观看视频| 福利片在线一区二区| 久久精品国产成人一区二区三区| 国产毛片精品| 狂野欧美性猛交xxxx| 国产精品久久国产愉拍| 国产日产精品_国产精品毛片| 蜜桃视频在线观看一区二区| 丝袜美腿亚洲色图| 亚洲一区导航| 中文字幕中文字幕精品| 视频国产精品| 日韩国产精品久久久| 91福利精品在线观看| 国产一区 二区| 国产精品一区二区三区av| 国产精品观看| 都市激情国产精品| 久久久夜夜夜| 99视频+国产日韩欧美| 先锋亚洲精品| 日韩一区二区三区精品| 日韩av在线播放中文字幕| 国产日产高清欧美一区二区三区| 国产精品毛片aⅴ一区二区三区| 国产极品嫩模在线观看91精品| 精品亚洲自拍| 欧美亚洲国产一区| 免费看日韩精品| 国产情侣一区在线| 成人国产精品一区二区免费麻豆| 欧洲av一区二区| 女主播福利一区| 视频一区二区中文字幕| 91福利精品在线观看| 国产精品麻豆久久| 在线看片不卡| 日本在线一区二区三区| 国产精品天堂蜜av在线播放| 97精品国产| 国产亚洲亚洲| 国产欧美一级| 人人草在线视频| 国产模特精品视频久久久久| 国产一级成人av| 成人免费电影网址| 亚洲免费福利一区| 国产一区二区久久久久| 欧洲激情综合| 日韩1区2区日韩1区2区| 国产一区二区三区四区| 欧美日韩国产一区精品一区| 亚洲精品自拍| 福利一区二区三区视频在线观看| 91久久久精品国产| 国产欧美自拍一区| 亚洲成人日韩| 麻豆国产精品777777在线| 免费国产自久久久久三四区久久| 日韩成人一级| 99久久婷婷这里只有精品| 日韩高清一区二区| 久久婷婷激情| 日韩综合一区二区三区| 香蕉成人av| 清纯唯美亚洲综合一区| 99精品视频在线| 日韩午夜视频在线| 日韩电影免费网址| 国产精品综合| 日韩精品一级中文字幕精品视频免费观看| 麻豆视频观看网址久久| 久久亚洲二区| 私拍精品福利视频在线一区| 日本视频一区二区| 国精品一区二区| 麻豆一区二区三区| 亚洲综合图色| 欧美日中文字幕| 狂野欧美性猛交xxxx| 亚洲毛片在线免费| 欧美va亚洲va日韩∨a综合色| 国产精品.xx视频.xxtv| 首页国产欧美久久| 久久久人人人| 国产中文字幕一区二区三区| 亚洲ww精品| 在线亚洲激情| 日韩一区二区在线免费| 老司机免费视频一区二区三区| 色综合视频一区二区三区日韩| 久久免费大视频| 亚洲国产欧美日本视频| 国产欧美日韩亚洲一区二区三区| 久久亚洲影院| 伊人影院久久| 欧美 日韩 国产一区二区在线视频| 免费一级欧美在线观看视频| 亚洲欧洲专区| 日韩专区一卡二卡| 亚洲成人精选| 久久久精品日韩| 色婷婷综合网| 国产精品成人一区二区不卡| 国产精品hd| 国产精品嫩模av在线| 日本午夜精品久久久久| 亚洲综合婷婷| 蜜臀精品久久久久久蜜臀| 夜夜精品视频| 亚洲少妇一区| 午夜亚洲一区| 欧美天堂亚洲电影院在线观看| 亚洲综合在线电影| 麻豆精品蜜桃|