日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

集合框架源码分析——抽象类

發布時間:2025/4/16 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集合框架源码分析——抽象类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public abstract class AbstractCollection<E> implements Collection<E> {
? ? /**
? ? ?* 唯一構造方法
? ? ?*/
? ? protected AbstractCollection() {
? ? }


? ? // Query Operations


? ? /**
? ? ?*
? ? ?* 返回集合中元素的迭代器
? ? ?*/
? ? public abstract Iterator<E> iterator();


? ? public abstract int size();


? ? public boolean isEmpty() {
return size() == 0; ? //size=0則此方法返回true
? ? }


? ? public boolean contains(Object o) {
Iterator<E> e = iterator(); ? //獲取此集合的迭代器
if (o==null) { ? ? ? ? ? ? ??
? ?while (e.hasNext()) ? ? ?
if (e.next()==null) ? //如果此集合允許null元素,找到則返回true
? ?return true;
} else {
? ?while (e.hasNext())
if (o.equals(e.next()))
? ?return true;
}
return false;
? ? }


? ? /**
? ? ?* 此方法是同步的,即使在遍歷集合的過程中發現集合已經改變,任然可以返回
? ? ?* 正確的結果
? ? ?*
? ? ?* 此方法等同于:
? ? ?*
? ? ?* List<E> list = new ArrayList<E>(size());
? ? ?* for (E e : this)
? ? ?* ? ? list.add(e);
? ? ?* return list.toArray();
? ? ?*/
? ? 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); ?//則僅返回長度為i的數組,i=當前集合長度
? ?r[i] = it.next();
}
? ? ? ? //如果遍歷完后發現集合還有更多的元素,即在遍歷時有元素被添加進集合,調用
? ? ? ? //finishToArray方法添加剩余的元素
return it.hasNext() ? finishToArray(r, it) : r;
? ? }


? ?
? ? public <T> T[] toArray(T[] a) {
? ? ? ? int size = size(); ? ? ?//當前集合長度
? ? ? ? T[] r = a.length >= size ? a : ?//如果a的長度大于等于size,把a賦給r,否則新建一個元素類型為a元素類型,size長度的數組
? ? ? ? ? ? ? ? ? (T[])java.lang.reflect.Array
? ? ? ? ? ? ? ? ? .newInstance(a.getClass().getComponentType(), size);
? ? ? ? Iterator<E> it = iterator();


for (int i = 0; i < r.length; i++) {
? ?if (! it.hasNext()) { 遍歷過程中,集合中有元素被移除,長度減少.或遍歷集合結束
if (a != r) ? //表明是新建的數組
? ?return Arrays.copyOf(r, i);
r[i] = null; // 表明是a,則多加一個null結束符
return r;
? ?}
? ?r[i] = (T)it.next();
}
return it.hasNext() ? finishToArray(r, it) : r;
? ? }


? ? /**
? ? ?* 當it還有更多的元素,重新分配數組。并把剩余元素添加進數組
? ? ?*/
? ? private static <T> T[] finishToArray(T[] r, Iterator<?> it) {
int i = r.length; ? ? ? ? //原來數組長度存入i中
while (it.hasNext()) {
int cap = r.length; ??
if (i == cap) { ? //表明未重新分配數組長度
int newCap = ((cap / 2) + 1) * 3; ? //新數組長度的計算公式,大約擴充1.5倍
if (newCap <= cap) { // 如果分配后發生了整型溢出
if (cap == Integer.MAX_VALUE)
throw new OutOfMemoryError("Required array size too large");
newCap = Integer.MAX_VALUE; ? ?
}
r = Arrays.copyOf(r, newCap); //新建一個長度為newCap的數組,并把r中數據存入
}
r[i++] = (T) it.next(); ? //添加集合剩余元素到新數組
}
// 修剪多余的長度
return (i == r.length) ? r : Arrays.copyOf(r, i);
}


? ? // Modification Operations


? ? /**
? ? ?* 調用此方法總是拋出一個異常,需要子類去重寫此方法
? ? ?*/
? ? public boolean add(E e) {
throw new UnsupportedOperationException();
? ? }


? ? /**
? ? ?* 此方法會首先在集合中查找指定元素o,如果找到就移除它
? ? ?* 移除的是第一個找到的匹配的值
? ? ?*/
? ? public boolean remove(Object o) {
Iterator<E> e = iterator();
if (o==null) { ? ? ? //集合支持null元素
? ?while (e.hasNext()) {
if (e.next()==null) {
? ?e.remove(); ? ??
? ?return true;
}
? ?}
} else {
? ?while (e.hasNext()) {
if (o.equals(e.next())) {
? ?e.remove();
? ?return true;
}
? ?}
}
return false;
? ? }




? ? // Bulk Operations


? ?
? ? public boolean containsAll(Collection<?> c) {
Iterator<?> e = c.iterator();
while (e.hasNext())
? ?if (!contains(e.next())) ?//如果c中有一個元素不在本集合中則返回false
return false;
return true;
? ? }


? ? /**
? ? ?* 此方法將拋出一個UnsupportedOperationException,除非子類重寫了add方法
? ? ?*/
? ? public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
Iterator<? extends E> e = c.iterator();
while (e.hasNext()) {
if (add(e.next())) ? //如果有一個元素添加失敗就返回false
modified = true;
}
return modified;
? ? }




? ? public boolean removeAll(Collection<?> c) {
boolean modified = false;
Iterator<?> e = iterator();
while (e.hasNext()) {
if (c.contains(e.next())) { //如果c中元素也保含在本集合中則移除它
e.remove();
modified = true;
}
}
return modified;
}


? ?public boolean retainAll(Collection<?> c) {
boolean modified = false;
Iterator<E> e = iterator();
while (e.hasNext()) {
if (!c.contains(e.next())) { ?//遍歷集合元素,如果元素不包含在c中,則移除此元素
e.remove(); ? ? ? ? ? ? ? //取的是交集
modified = true;
}
}
return modified;
}




? ? public void clear() {
Iterator<E> e = iterator();
while (e.hasNext()) { ? ?//依次調用next和remove方法
? ?e.next();
? ?e.remove();
}
? ? }




? ? // ?String conversion


? ?/**
* 重寫toString方法,返回格式:[e.toString, e2.toString, ...]
* */
public String toString() {
Iterator<E> i = iterator();
if (!i.hasNext()) ? //如果集合為空返回[]
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (!i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}


}

總結

以上是生活随笔為你收集整理的集合框架源码分析——抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青娱乐最新视频 | 欧美黄色大片视频 | 偷拍一区二区三区 | 一级片aaa | 嫩草影院一区二区 | 久久久久久久久久99 | 中文字幕第18页 | 天堂中文字幕在线观看 | 四虎三级 | 自由 日本语 热 亚洲人 | 成人午夜小视频 | 亚洲精品在 | 天堂在线资源库 | 91亚洲精华| 懂色中文一区二区在线播放 | 波多野结衣一二区 | 91亚洲精品一区 | 黄色av免费看 | 欧美成人tv| 国产福利小视频在线 | 日韩不卡一二三区 | 美女黄色大片 | av国产网站 | 99精品久久99久久久久 | 男女黄床上色视频 | 欧美 亚洲 激情 一区 | 性欧美丰满熟妇xxxx性久久久 | 黄色激情视频在线观看 | 黄色91免费观看 | 亚洲美女爱爱 | 超碰人人爱人人 | 国产精品一区二区三区线羞羞网站 | 女人17片毛片60分钟 | 六月丁香激情 | 成人天堂网 | 国产精品入口夜色视频大尺度 | 人人爽人人干 | 四虎www | 国产在线毛片 | 亚洲精品国产精品乱码在线观看 | 特黄一级大片 | 久射久 | 日韩在线视频免费 | 国产对白羞辱绿帽vk | 黄色视屏免费 | 免费中文字幕av | 色久阁| 日日做夜夜爽毛片麻豆 | h视频在线看 | 国产毛片毛片毛片毛片毛片 | 善良的女邻居在线观看 | 国产.com | 亚洲va欧美va天堂v国产综合 | 亚洲中文无码av在线 | 午夜伊人网 | 北条麻妃av在线 | 杨幂毛片午夜性生毛片 | 日韩av线上 | 久久久无码一区二区三区 | 一本色道久久hezyo加勒比 | 黄色工厂这里只有精品 | 天天综合网天天综合 | 黄色一级视频免费 | 国产av剧情一区二区三区 | av五十路| 国产伦精品一区二区免费 | 边吃奶边添下面好爽 | 欧美性受xxx黑人xyx性爽 | 亚洲高清中文字幕 | 嫩草一区 | 国产精品传媒在线 | 亚洲精品一二 | 久久国产柳州莫菁门 | 青春草免费视频 | 99视频99 | 91毛片在线观看 | 国产八区 | 成人性生活免费看 | 涩涩综合 | 亚洲成人网在线 | 91精品国产闺蜜国产在线闺蜜 | 久久国产一二三 | 黄色三及 | 国产精品丝袜在线观看 | 色羞羞| 中国老太婆性做爰 | 亚洲欧美一区二区精品久久久 | 91精品视频网 | 日韩欧美激情在线 | 91久久国产 | 国产无套粉嫩白浆内谢 | 日本激情一区二区三区 | 深夜福利免费在线观看 | 麻豆精品国产传媒mv男同 | 日韩精品aaa | 国产成人无码网站 | 亚洲天堂日韩av | 波多野结衣电影免费观看 | 最新av观看 |