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

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

Java源碼解析之接口Collection

瀏覽:176日期:2022-08-12 13:01:11
目錄一、圖示二、方法定義三、超級(jí)實(shí)現(xiàn)類 AbstractCollection一、圖示

Java源碼解析之接口Collection

二、方法定義

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

//返回集合的長(zhǎng)度,如果長(zhǎng)度大于Integer.MAX_VALUE,返回Integer.MAX_VALUEint size();//如果集合元素總數(shù)為0,返回trueboolean isEmpty();//判斷集合中是否包含指定的元素,其依據(jù)是equals()方法boolean contains(Object o);//返回一個(gè)包含集合中所有元素的數(shù)組Object[] toArray();//與上個(gè)類似,只是增加了類型的轉(zhuǎn)換<T> T[] toArray(T[] a);//向集合中加入一個(gè)元素,如果成功加入則返回true,如果加入失敗,或者因集合本身已經(jīng)包含同個(gè)元素而不再加入時(shí),返回falseboolean add(E e);//從集合中刪除指定元素的單個(gè)實(shí)例boolean remove(Object o);//如果集合包含指定集合中的所有元素,返回trueboolean containsAll(Collection<?> c);//把指定集合中的所有元素添加到集合中,但在此期間,如果指定的集合發(fā)生了改變,可能出現(xiàn)意想不到的事情boolean addAll(Collection<? extends E> c);//從集合中刪除所有包含在指定集合中的元素boolean removeAll(Collection<?> c);//僅保留集合中包含在指定集合中的元素boolean retainAll(Collection<?> c);//清空集合void clear();//將此方法抽象,是保證所有子類都覆寫此方法,以保證equals的正確行為boolean equals(Object o);//同上int hashCode();//這個(gè)方法在JDK1.8中提供了默認(rèn)的實(shí)現(xiàn),會(huì)使用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;}三、超級(jí)實(shí)現(xiàn)類 AbstractCollection

通過以上的學(xué)習(xí),我們可以知道在collection接口中,有很多通用的方法,根據(jù)現(xiàn)有的定義以及繼承的Iterable接口,都可以在抽象方法中實(shí)現(xiàn),這樣就可以減少具體實(shí)現(xiàn)類需要實(shí)現(xiàn)的方法,所以就有了這么一個(gè)類?AbstractCollection。

首先我們來看看api文檔對(duì)這個(gè)類的大概描述:

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

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

//這個(gè)毫無疑問,是可以直接獲取的public boolean isEmpty() { return size() == 0;}//這個(gè)方法因?yàn)镮terator的存在,可以進(jìn)行一致性封裝,這里需要注意的是對(duì)象的比較是通過equals方法,因?yàn)檎{(diào)用到了it.next()與it.hasNext(),這也是為什么文檔注釋會(huì)寫實(shí)現(xiàn)集合類需要重寫Iterator的這兩個(gè)方法。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實(shí)現(xiàn)的,但其會(huì)調(diào)用it.remove()方法,這也是為什么文檔注釋會(huì)寫實(shí)現(xiàn)可以修改的集合類時(shí)需要重寫Iterator的remove方法。public boolean remove(Object o) { //...省略,這里調(diào)用了it.remove()方法}

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

除此之外,還有一個(gè)toArray方法,方法實(shí)現(xiàn)還有一些略微不同:

//這個(gè)實(shí)現(xiàn)相對(duì)復(fù)雜一些,可以看到擴(kuò)容最主要的手段是Arrays.copyOf()方法,//也就是需要將原數(shù)組通過復(fù)制到新的數(shù)組中來實(shí)現(xiàn)的。//注意這里返回的順序和Iterator順序一致//在這里實(shí)現(xiàn)是為了方便不同具體實(shí)現(xiàn)類互相轉(zhuǎn)換,我們?cè)诤罄m(xù)會(huì)多次見到此方法public Object[] toArray() { //先根據(jù)當(dāng)前集合大小聲明一個(gè)數(shù)組 Object[] r = new Object[size()]; Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) {//集合元素沒那么多,說明不需要那么大的數(shù)組if (! it.hasNext()) return Arrays.copyOf(r, i); //僅返回賦完值的部分r[i] = it.next(); } //元素比從size()中獲取的更多,就需要進(jìn)一步調(diào)整數(shù)組大小 return it.hasNext() ? finishToArray(r, it) : r;}private static <T> T[] finishToArray(T[] r, Iterator<?> it) { //記錄當(dāng)前大小 int i = r.length; while (it.hasNext()) {int cap = r.length;//r的長(zhǎng)度不夠,繼續(xù)分配if (i == cap) { //擴(kuò)充方式為cap+cap/2+1,也就是1.5倍擴(kuò)容 int newCap = cap + (cap >> 1) + 1; // 超過了最大容量,MAX_ARRAY_SIZE=Integer.MAX_VALUE-8 if (newCap - MAX_ARRAY_SIZE > 0)//重新設(shè)置cap的值newCap = hugeCapacity(cap + 1);//對(duì)r進(jìn)行擴(kuò)容 r = Arrays.copyOf(r, newCap);}//賦值,進(jìn)入下一輪循環(huán)r[i++] = (T)it.next(); } // 由于之前擴(kuò)容是1.5倍進(jìn)行的,最后再將其設(shè)置到和r實(shí)際需要的相同 return (i == r.length) ? r : Arrays.copyOf(r, i);}private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // 超過了最大正整數(shù),也就是負(fù)數(shù)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) { //...}

除了這些,我們?cè)賮砜纯碅bstractCollection是怎么實(shí)現(xiàn)toString方法的吧+

其是通過StringBuilder拼接了每個(gè)元素的toString完成的,不是很復(fù)雜。

我們來看看源碼吧

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(’ ’); }}

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
av不卡在线| 青青久久av| 免费美女久久99| 9色精品在线| 天使萌一区二区三区免费观看| 久久九九精品| 国产一区不卡| 亚洲一区资源| 久久久久久黄| 欧美日韩一区二区三区视频播放| 国产一区日韩一区| 尤物网精品视频| 亚洲精一区二区三区| 亚洲免费一区三区| 日韩成人午夜精品| 国产精品中文| 裤袜国产欧美精品一区| 日韩毛片在线| 精品一区三区| 亚洲精品高潮| 国产丝袜一区| 欧美aⅴ一区二区三区视频| 国产黄大片在线观看| 亚洲婷婷在线| 亚洲精品人人| 美女免费视频一区| 久久久久网站| 亚洲网址在线观看| 久久精品免费看| 久久久国产亚洲精品| 一本色道久久精品| 欧美一级二级三级视频| 你懂的网址国产 欧美| 99tv成人| 亚洲综合激情在线| 你懂的国产精品永久在线| 国产成人久久精品麻豆二区| 亚洲无线一线二线三线区别av| 亚洲毛片视频| 久久精品亚洲一区二区| 九九精品调教| 亚洲深夜福利在线观看| 卡一精品卡二卡三网站乱码| 激情久久久久久| 日韩和欧美的一区| 精品丝袜在线| 欧美一区网站| 国精品一区二区三区| 奇米777国产一区国产二区| 国产精品精品| 亚洲日本三级| 国产一区丝袜| 一区二区三区国产在线| 精品久久不卡| 亚洲在线观看| 国产成人免费| 日韩一区二区三区免费视频| 亚洲四虎影院| 高清日韩欧美| 亚洲日本欧美| 久久久成人网| 97久久中文字幕| 亚洲欧美伊人| 久久国产乱子精品免费女| 在线日韩一区| 久久一区欧美| 欧美 日韩 国产一区二区在线视频| 国产探花一区二区| 9国产精品视频| 国产美女高潮在线观看| 91午夜精品| 久久不射中文字幕| 日韩国产欧美一区二区| 热久久久久久| 国产亚洲在线| 久久久一本精品| 国产激情久久| 亚洲精品日本| 激情综合网站| 国产aⅴ精品一区二区三区久久 | 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产精品va| 视频一区二区国产| 日韩精品欧美| 精品国产aⅴ| 免费人成在线不卡| 99久久久久国产精品| 美腿丝袜亚洲一区| 日韩欧美久久| 国产一区91| 久久一区二区三区电影| 国产成人免费av一区二区午夜| 日本强好片久久久久久aaa| 99在线观看免费视频精品观看| 日韩国产综合| 国产aⅴ精品一区二区四区| 日本欧美在线| 免费成人性网站| 自拍日韩欧美| 亚洲va在线| 日韩国产在线| 麻豆成全视频免费观看在线看| 国产精品一区二区av交换| 日韩免费精品| 婷婷综合成人| 亚洲资源在线| 亚洲一区欧美| 日本 国产 欧美色综合| 99日韩精品| 国产视频一区欧美| 亚洲欧美视频| 亚洲免费播放| 99亚洲视频| 国产精品毛片| 麻豆91精品| 亚洲日本久久| 日韩精品免费视频人成| 亚洲精品第一| 青青草国产成人99久久| 欧美久久香蕉| 国产精品麻豆成人av电影艾秋| 国产精品一级| 精品高清久久| 日韩不卡视频在线观看| 日韩免费看片| 亚洲欧美综合| 亚洲综合日韩| 亚洲婷婷丁香| 欧美亚洲一级| 精品美女在线视频| 在线看片国产福利你懂的| 日韩精品专区| 亚洲香蕉网站| 麻豆精品网站| 日韩1区2区日韩1区2区| 国产精品99精品一区二区三区∴ | 国产精品毛片久久久| 国产精品视频一区二区三区 | 日本欧美在线| 国产精品黄色| 国产一区二区精品久| 蜜桃精品在线| 好看的亚洲午夜视频在线| 美女91精品| 日韩1区2区日韩1区2区| 美女精品久久| 国产超碰精品| 喷白浆一区二区| 日韩精品亚洲专区| 美腿丝袜亚洲一区| 久久精品青草| 日韩天堂av| 欧美中文一区| 国产91在线精品| 婷婷成人基地| 亚州av日韩av| 激情中国色综合| 午夜久久黄色| 国产亚洲高清一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩欧美国产精品综合嫩v| 国产一区日韩一区| 午夜性色一区二区三区免费视频| 国产乱人伦丫前精品视频| 中文字幕在线官网| 亚洲婷婷丁香| 国产精品99视频| 欧美成人高清| 国产亚洲观看| 亚洲高清成人| 国产欧美日韩精品一区二区三区| 日韩电影免费网站| 蜜桃久久精品一区二区| 欧美国产三级| 欧美日韩国产欧| 青青国产91久久久久久| 蜜桃av在线播放| 亚洲aa在线| 日韩欧美三级| 日本a口亚洲| 激情久久五月| 麻豆精品视频在线观看| 亚洲精品一区二区在线看| 国产日韩亚洲| 红桃视频国产一区| 国产精品chinese| 亚洲一区网站| 鲁鲁在线中文| 国产亚洲精品美女久久久久久久久久| 香蕉成人av| 奇米777国产一区国产二区| 欧美日韩一区二区三区视频播放| 欧美一区二区三区久久精品| 亚洲一级二级| 精品丝袜久久| 日本99精品| 在线亚洲免费| 电影亚洲精品噜噜在线观看| 国产麻豆精品久久| 中文字幕亚洲影视|