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

您的位置:首頁技術文章
文章詳情頁

Java源碼解析之接口Collection

瀏覽:179日期:2022-08-12 13:01:11
目錄一、圖示二、方法定義三、超級實現類 AbstractCollection一、圖示

Java源碼解析之接口Collection

二、方法定義

我們先想一想,公司如果要我們自己去封裝一些操作數組或者鏈表的工具類,我么需要封裝哪些功能呢?不妨就是統計其 大小,增刪改查、清空或者是查看否含有某條數據等等。而collection接口就是把這些通常操作提取出來,使其更全面、更通用,那現在我們就來看看其源碼都有哪些方法。

//返回集合的長度,如果長度大于Integer.MAX_VALUE,返回Integer.MAX_VALUEint size();//如果集合元素總數為0,返回trueboolean isEmpty();//判斷集合中是否包含指定的元素,其依據是equals()方法boolean contains(Object o);//返回一個包含集合中所有元素的數組Object[] toArray();//與上個類似,只是增加了類型的轉換<T> T[] toArray(T[] a);//向集合中加入一個元素,如果成功加入則返回true,如果加入失敗,或者因集合本身已經包含同個元素而不再加入時,返回falseboolean add(E e);//從集合中刪除指定元素的單個實例boolean remove(Object o);//如果集合包含指定集合中的所有元素,返回trueboolean containsAll(Collection<?> c);//把指定集合中的所有元素添加到集合中,但在此期間,如果指定的集合發生了改變,可能出現意想不到的事情boolean addAll(Collection<? extends E> c);//從集合中刪除所有包含在指定集合中的元素boolean removeAll(Collection<?> c);//僅保留集合中包含在指定集合中的元素boolean retainAll(Collection<?> c);//清空集合void clear();//將此方法抽象,是保證所有子類都覆寫此方法,以保證equals的正確行為boolean equals(Object o);//同上int hashCode();//這個方法在JDK1.8中提供了默認的實現,會使用Iterator的形式刪除符合條件的元素default boolean removeIf(Predicate<? super E> filter){ Objects.requireNonNull(filter); boolean removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) {if (filter.test(each.next())) { each.remove(); removed = true;} } return removed;}三、超級實現類 AbstractCollection

通過以上的學習,我們可以知道在collection接口中,有很多通用的方法,根據現有的定義以及繼承的Iterable接口,都可以在抽象方法中實現,這樣就可以減少具體實現類需要實現的方法,所以就有了這么一個類?AbstractCollection。

首先我們來看看api文檔對這個類的大概描述:

如果要實現一個不可修改的集合,只需要重寫Iterator和size接口就可以了,并且返回的Iterator需要實現hasNext和Next。而要實現一個可以修改的集合,還必須重寫add方法,返回的Iterator還要實現remove接口。

接下里我們來看看其方法定義

//這個毫無疑問,是可以直接獲取的public boolean isEmpty() { return size() == 0;}//這個方法因為Iterator的存在,可以進行一致性封裝,這里需要注意的是對象的比較是通過equals方法,因為調用到了it.next()與it.hasNext(),這也是為什么文檔注釋會寫實現集合類需要重寫Iterator的這兩個方法。public boolean contains(Object o) { Iterator<E> it = iterator(); if (o==null) {while (it.hasNext()) if (it.next()==null)return true; } else {while (it.hasNext()) if (o.equals(it.next()))return true; } return false;}//和contains類似,也是通過Iterator實現的,但其會調用it.remove()方法,這也是為什么文檔注釋會寫實現可以修改的集合類時需要重寫Iterator的remove方法。public boolean remove(Object o) { //...省略,這里調用了it.remove()方法}

還有很多方法也用到了iterator的特性,例如containAll、addAll等等,這里就不一 一說明了。

除此之外,還有一個toArray方法,方法實現還有一些略微不同:

//這個實現相對復雜一些,可以看到擴容最主要的手段是Arrays.copyOf()方法,//也就是需要將原數組通過復制到新的數組中來實現的。//注意這里返回的順序和Iterator順序一致//在這里實現是為了方便不同具體實現類互相轉換,我們在后續會多次見到此方法public Object[] toArray() { //先根據當前集合大小聲明一個數組 Object[] r = new Object[size()]; Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) {//集合元素沒那么多,說明不需要那么大的數組if (! it.hasNext()) return Arrays.copyOf(r, i); //僅返回賦完值的部分r[i] = it.next(); } //元素比從size()中獲取的更多,就需要進一步調整數組大小 return it.hasNext() ? finishToArray(r, it) : r;}private static <T> T[] finishToArray(T[] r, Iterator<?> it) { //記錄當前大小 int i = r.length; while (it.hasNext()) {int cap = r.length;//r的長度不夠,繼續分配if (i == cap) { //擴充方式為cap+cap/2+1,也就是1.5倍擴容 int newCap = cap + (cap >> 1) + 1; // 超過了最大容量,MAX_ARRAY_SIZE=Integer.MAX_VALUE-8 if (newCap - MAX_ARRAY_SIZE > 0)//重新設置cap的值newCap = hugeCapacity(cap + 1);//對r進行擴容 r = Arrays.copyOf(r, newCap);}//賦值,進入下一輪循環r[i++] = (T)it.next(); } // 由于之前擴容是1.5倍進行的,最后再將其設置到和r實際需要的相同 return (i == r.length) ? r : Arrays.copyOf(r, i);}private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // 超過了最大正整數,也就是負數throw new OutOfMemoryError ('Required array size too large'); return (minCapacity > MAX_ARRAY_SIZE) ?Integer.MAX_VALUE :MAX_ARRAY_SIZE;}//和toArray()方法類似,就不再贅述,具體可以查看源碼public <T> T[] toArray(T[] a) { //...}

除了這些,我們再來看看AbstractCollection是怎么實現toString方法的吧+

其是通過StringBuilder拼接了每個元素的toString完成的,不是很復雜。

我們來看看源碼吧

public String toString() { Iterator<E> it = iterator(); if (! it.hasNext())return '[]'; StringBuilder sb = new StringBuilder(); sb.append(’[’); for (;;) {E e = it.next();sb.append(e == this ? '(this Collection)' : e);if (! it.hasNext()) return sb.append(’]’).toString();sb.append(’,’).append(’ ’); }}

到此這篇關于Java源碼解析之接口Collection的文章就介紹到這了,更多相關Java接口Collection 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧洲美洲av| 国产va在线视频| 国产精品腿扒开做爽爽爽挤奶网站| 午夜电影一区| 日韩一区二区免费看| 国产精品入口久久| 亚洲精品网址| 亚洲毛片在线免费| 成人午夜亚洲| 日韩电影免费在线观看| 999久久久亚洲| 亚洲综合另类| 999久久久精品国产| 91成人在线| 蜜桃久久久久| 1024精品久久久久久久久| 国产精品调教| 日韩一区二区三区四区五区| 最新国产精品| 好吊视频一区二区三区四区| 精品中国亚洲| 国内自拍视频一区二区三区| 免费一级片91| 久久a爱视频| 亚洲专区视频| 婷婷中文字幕一区| 欧美精品99| 宅男噜噜噜66国产日韩在线观看| 亚洲精品成人一区| 国产精品毛片一区二区三区| 另类欧美日韩国产在线| 成人久久久久| 国产va免费精品观看精品视频| 日韩国产欧美在线播放| 日本99精品| 在线看片一区| 国产乱码精品一区二区三区亚洲人| 国产在线不卡一区二区三区| 欧美性感美女一区二区| 免费不卡中文字幕在线| 亚洲专区视频| 久久一区亚洲| 久久精品av| 午夜性色一区二区三区免费视频| 欧美国产极品| 久久精品国产99久久| 国产精品精品| 国产精品久久久久久久免费观看| 久久亚洲一区| 日本国产精品| 国产精品99视频| 国产精品麻豆成人av电影艾秋| 国产女人18毛片水真多18精品| 精品久久99| 亚洲免费在线| 日本午夜精品视频在线观看| 久久福利在线| 欧美精品激情| 国产精品久久免费视频| av不卡免费看| 国产精品夜夜夜| 不卡福利视频| 欧美精品三级在线| 久久要要av| 免费污视频在线一区| 在线国产一区| 蜜桃久久久久久久| 久久精品一区| 99国产精品久久久久久久成人热| 亚洲精品在线国产| 精品国产黄a∨片高清在线| 91精品国产乱码久久久久久久| 午夜影院欧美| 香蕉久久久久久| 国产午夜久久av| 欧美女激情福利| 97精品国产一区二区三区| 久久精品超碰| 久久丁香四色| 国产女人18毛片水真多18精品| aⅴ色国产欧美| 亚洲日韩中文字幕一区| 国产欧美一区二区三区国产幕精品 | 色爱av综合网| 欧美肉体xxxx裸体137大胆| 五月天久久777| 欧美激情91| 偷拍精品精品一区二区三区| 日本成人在线不卡视频| 狠狠久久伊人中文字幕| 亚洲一区激情| 日韩一区二区久久| 亚洲午夜一级| 99精品视频在线| 国产精品va| 日本aⅴ亚洲精品中文乱码| 日韩国产一区二区| 欧美成a人片免费观看久久五月天| 欧美中文字幕| 亚洲精品va| 91精品一区国产高清在线gif| 久久精品资源| 日韩在线一二三区| 免费黄色成人| 日韩免费福利视频| 久久99影视| 视频一区日韩精品| 国产一区二区三区日韩精品 | 欧美理论视频| 日韩精品第一区| 国产在线观看www| 新版的欧美在线视频| 久久精品免费一区二区三区| 亚洲91精品| 蜜臀av在线播放一区二区三区| 日韩美女国产精品| 日韩国产91| 国产v日韩v欧美v| 免费日韩一区二区| 久久99视频| 国产99久久久国产精品成人免费| 首页国产欧美日韩丝袜| 中文字幕一区二区精品区| 久久久国产精品入口麻豆| 国产suv精品一区| 欧美不卡在线| 综合视频一区| 国产精品久久久免费| 亚洲电影在线一区二区三区| 国产伦理久久久久久妇女| 国产在线观看91一区二区三区| 久久国产精品色av免费看| 成人亚洲精品| 久久精品亚洲人成影院| 精品日韩一区| 精品伊人久久久| 免费看久久久| 天堂√8在线中文| 日本欧美不卡| 欧美日韩国产综合网| 亚洲免费观看| 亚洲另类视频| 丝袜美腿一区| 国产精品theporn| 亚洲网站视频| 欧美私人啪啪vps| 日本午夜精品久久久久| 日韩中出av| 日韩欧美综合| 亚洲精品进入| 国产视频久久| 日韩av在线中文字幕| 青青草91久久久久久久久| 婷婷激情综合| 91精品xxx在线观看| 久久精品资源| 日韩欧美高清一区二区三区| 在线精品一区二区| 欧美成人精品| 日韩另类视频| 欧美日韩视频网站| 国产私拍福利精品视频二区| 欧美精品一二| 国产亚洲在线观看| 美女久久一区| 亚洲精品88| 国产精品亚洲欧美| 亚州av日韩av| 视频一区欧美日韩| 午夜精品婷婷| 911亚洲精品| 日本va欧美va精品发布| 日韩精品福利一区二区三区| 日韩精品一级二级| 亚洲精品免费观看| 亚洲2区在线| 青草国产精品| 你懂的国产精品| 婷婷综合社区| 国产精品九九| 欧美日一区二区| 18国产精品| 欧美一区二区三区高清视频| 日韩精品视频在线看| 亚洲一区国产| 欧美在线91| 欧美日韩黄网站| 色老板在线视频一区二区| 亚洲福利专区| 亚洲欧美伊人| 欧美在线日韩| 亚洲国内精品| 国产精品原创| 精品丝袜久久| 国产亚洲久久| 日本亚洲欧美天堂免费| 一本大道色婷婷在线| 久久国内精品自在自线400部| 亚洲伦乱视频| 国产精品国产三级在线观看|