摘要:返回刪除元素的刪除方法記錄修改次數(shù)的變量根據(jù)數(shù)組下標(biāo)拿到指定元素計算移動位數(shù)把中復(fù)制到,最后一個元素置為下標(biāo)檢查,如果大于數(shù)組的,拋出異常返回一個值的刪除方法傳進(jìn)來,刪除第一個值為的值注意此時加入了兩個值此時執(zhí)行了一句只刪除了
1.返回刪除元素的刪除方法
public E remove(int index) { rangeCheck(index); modCount++;//記錄修改次數(shù)的變量 E oldValue = elementData(index);//根據(jù)數(shù)組下標(biāo)拿到指定元素 int numMoved = size - index - 1;//計算移動位數(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,最后一個元素置為null return oldValue; }
下標(biāo)檢查,如果大于數(shù)組的size,拋出異常
private void rangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); }2.返回一個boolean值的刪除方法
2.1傳進(jìn)來null,刪除第一個值為null的值(注意此時加入了兩個null值)
此時執(zhí)行了一句list.remove(null);只刪除了在物理位置上比較靠前的null,第二次刪除才會刪除第二個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.從這個列表中刪除所有未包含在指定集合中的元素
public boolean retainAll(Collection> c) { Objects.requireNonNull(c); // 檢查,如果此對象為空,拋出空指針異常 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67672.html
摘要:如果這個是剛剛初始化好的容量為,則為默認(rèn)值若容量不固定,則比較與的大小,返回最大值?,F(xiàn)在最小容量大小超過現(xiàn)在數(shù)組的長度,增長自增倍大于溢出三元表達(dá)式,大于取整形最大值用新的長度創(chuàng)建一個新數(shù)組把原數(shù)組的內(nèi)容拷貝到新數(shù)組中,并返回新數(shù)組 一、構(gòu)造方法 1.創(chuàng)建一個空ArrayList public ArrayList() { this.elementData = DEFAULTCA...
摘要:類庫中提供了一套相當(dāng)完整的容器類來解決這個問題,其中基本類型有,,,,這些對象類型被稱為集合類。但是,類庫中使用了來指代集合類中的子集,,,所以集合類也被稱為容器。五類型是能夠?qū)ο笥成涞狡渌麑ο蟮囊环N容器,有區(qū)別于的方法。 引言 如果一個程序只包含固定數(shù)量的且其生命周期都是已知對象,那么這是一個非常簡單的程序——《think in java》 了解容器前,先提出一個問題,ArrayL...
摘要:更加實際的定義應(yīng)該是一個集合是一個容器,它其中所包含的元素的值是唯一的。對而言,鍵只是指存儲在容器中的某一成員。成員函數(shù)構(gòu)造函數(shù)中的元素都是模板類對象。元素按照成員變量從小到大排列,缺省情況下用定義關(guān)鍵字的小于關(guān)系。 分類:set, multiset, map, multimap 特點(diǎn):內(nèi)部元素有序排列,新元素插入的位置取決于它的值,查找速度快。 常用函數(shù): find: 查找等于...
摘要:可以看到,如果我們給泛型類制定了上限,泛型擦除之后就會被替換成類型的上限。相應(yīng)的,泛型類中定義的方法的類型也是如此。參考語言類型擦除下界通配符和的區(qū)別 本篇博客主要介紹了Java類型擦除的定義,詳細(xì)的介紹了類型擦除在Java中所出現(xiàn)的場景。 1. 什么是類型擦除 為了讓你們快速的對類型擦除有一個印象,首先舉一個很簡單也很經(jīng)典的例子。 // 指定泛型為String List list1 ...
閱讀 2187·2021-11-18 10:02
閱讀 3289·2021-11-11 16:55
閱讀 2694·2021-09-14 18:02
閱讀 2426·2021-09-04 16:41
閱讀 2057·2021-09-04 16:40
閱讀 1165·2019-08-30 15:56
閱讀 2213·2019-08-30 15:54
閱讀 3161·2019-08-30 14:15