摘要:返回刪除元素的刪除方法記錄修改次數(shù)的變量根據(jù)數(shù)組下標(biāo)拿到指定元素計(jì)算移動(dòng)位數(shù)把中復(fù)制到,最后一個(gè)元素置為下標(biāo)檢查,如果大于數(shù)組的,拋出異常返回一個(gè)值的刪除方法傳進(jìn)來,刪除第一個(gè)值為的值注意此時(shí)加入了兩個(gè)值此時(shí)執(zhí)行了一句只刪除了
1.返回刪除元素的刪除方法
public E remove(int index) { rangeCheck(index); modCount++;//記錄修改次數(shù)的變量 E oldValue = elementData(index);//根據(jù)數(shù)組下標(biāo)拿到指定元素 int numMoved = size - index - 1;//計(jì)算移動(dòng)位數(shù) if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved);//把elementData中(index+1,size-1)復(fù)制到(index,size-1) elementData[--size] = null; // size-1,最后一個(gè)元素置為null return oldValue; }
下標(biāo)檢查,如果大于數(shù)組的size,拋出異常
private void rangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }2.返回一個(gè)boolean值的刪除方法
2.1傳進(jìn)來null,刪除第一個(gè)值為null的值(注意此時(shí)加入了兩個(gè)null值)
此時(shí)執(zhí)行了一句list.remove(null);只刪除了在物理位置上比較靠前的null,第二次刪除才會(huì)刪除第二個(gè)null
public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; }
此方法執(zhí)行的就是上面"返回刪除元素"方法中的內(nèi)容
private void fastRemove(int index) { modCount++; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; }3.從這個(gè)列表中刪除所有未包含在指定集合中的元素
public boolean retainAll(Collection> c) { Objects.requireNonNull(c); // 檢查,如果此對(duì)象為空,拋出空指針異常 return batchRemove(c, true); }
private boolean batchRemove(Collection> c, boolean complement) { final Object[] elementData = this.elementData; int r = 0, w = 0; boolean modified = false; try { for (; r < size; r++) //如果傳入的集合c,包含當(dāng)前所遍歷的數(shù)組的元素,重新整理一下list中的元素 if (c.contains(elementData[r]) == complement) elementData[w++] = elementData[r]; } finally { // 拋出異常后的處理(下面為JDK中的描述) // Preserve behavioral compatibility with AbstractCollection, // even if c.contains() throws. if (r != size) { System.arraycopy(elementData, r, elementData, w, size - r); w += size - r; } if (w != size) { // clear to let GC do its work for (int i = w; i < size; i++) elementData[i] = null; modCount += size - w; size = w; modified = true; } } return modified; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67672.html
摘要:如果這個(gè)是剛剛初始化好的容量為,則為默認(rèn)值若容量不固定,則比較與的大小,返回最大值?,F(xiàn)在最小容量大小超過現(xiàn)在數(shù)組的長(zhǎng)度,增長(zhǎng)自增倍大于溢出三元表達(dá)式,大于取整形最大值用新的長(zhǎng)度創(chuàng)建一個(gè)新數(shù)組把原數(shù)組的內(nèi)容拷貝到新數(shù)組中,并返回新數(shù)組 一、構(gòu)造方法 1.創(chuàng)建一個(gè)空ArrayList public ArrayList() { this.elementData = DEFAULTCA...
摘要:類庫(kù)中提供了一套相當(dāng)完整的容器類來解決這個(gè)問題,其中基本類型有,,,,這些對(duì)象類型被稱為集合類。但是,類庫(kù)中使用了來指代集合類中的子集,,,所以集合類也被稱為容器。五類型是能夠?qū)?duì)象映射到其他對(duì)象的一種容器,有區(qū)別于的方法。 引言 如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知對(duì)象,那么這是一個(gè)非常簡(jiǎn)單的程序——《think in java》 了解容器前,先提出一個(gè)問題,ArrayL...
摘要:更加實(shí)際的定義應(yīng)該是一個(gè)集合是一個(gè)容器,它其中所包含的元素的值是唯一的。對(duì)而言,鍵只是指存儲(chǔ)在容器中的某一成員。成員函數(shù)構(gòu)造函數(shù)中的元素都是模板類對(duì)象。元素按照成員變量從小到大排列,缺省情況下用定義關(guān)鍵字的小于關(guān)系。 分類:set, multiset, map, multimap 特點(diǎn):內(nèi)部元素有序排列,新元素插入的位置取決于它的值,查找速度快。 常用函數(shù): find: 查找等于...
摘要:可以看到,如果我們給泛型類制定了上限,泛型擦除之后就會(huì)被替換成類型的上限。相應(yīng)的,泛型類中定義的方法的類型也是如此。參考語言類型擦除下界通配符和的區(qū)別 本篇博客主要介紹了Java類型擦除的定義,詳細(xì)的介紹了類型擦除在Java中所出現(xiàn)的場(chǎng)景。 1. 什么是類型擦除 為了讓你們快速的對(duì)類型擦除有一個(gè)印象,首先舉一個(gè)很簡(jiǎn)單也很經(jīng)典的例子。 // 指定泛型為String List list1 ...
摘要:算法部分主要由頭文件組成。數(shù)值算法對(duì)容器內(nèi)容進(jìn)行數(shù)值計(jì)算。在指定范圍內(nèi)查找由輸入的另外一對(duì)標(biāo)志的第二個(gè)序列的最后一次出現(xiàn)。重載函數(shù)使用自定義比較操作。刪除指定范圍內(nèi)所有等于指定元素的元素。返回,指出序列中最小的元素。 STL算法部分主要由頭文件,,組成。要使用 STL中的算法函數(shù)必須包含頭文件,對(duì)于數(shù)值算法須包含,中則定義了一些模板類,用來聲明函數(shù)對(duì)象。 分類 STL中算法大致分為...
閱讀 2199·2021-11-18 10:02
閱讀 3302·2021-11-11 16:55
閱讀 2706·2021-09-14 18:02
閱讀 2442·2021-09-04 16:41
閱讀 2076·2021-09-04 16:40
閱讀 1200·2019-08-30 15:56
閱讀 2222·2019-08-30 15:54
閱讀 3173·2019-08-30 14:15