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

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

在java中ArrayList集合底層的擴(kuò)容原理

瀏覽:23日期:2022-08-14 14:16:15
第一章 前言概述第01節(jié) 概述

底層說明

ArrayList是List的實(shí)現(xiàn)類,它的底層是用Object數(shù)組存儲(chǔ),線程不安全

后期應(yīng)用

適合用于頻繁的查詢工作,因?yàn)榈讓邮菙?shù)組,可以快速通過數(shù)組下標(biāo)進(jìn)行查找

第02節(jié) 區(qū)別區(qū)別方向 ArrayList集合 LinkedList集合 線程安全 不安全 不安全 底層原理 Object類型數(shù)組 雙向鏈表 隨機(jī)訪問 支持(實(shí)現(xiàn) RandomAccess接口) 不支持 內(nèi)存占用 ArrayList 浪費(fèi)空間, 底層是數(shù)組,末尾預(yù)留一部分容量空間 LinkedList占用空間比ArrayList多,存在頭尾地址值占用空間

小結(jié)

ArrayList 集合的特點(diǎn):

1. 線程不安全

2. 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組(查詢快,增刪慢,支持快速隨機(jī)訪問)

3. 內(nèi)存占用會(huì)存在部分浪費(fèi),末尾會(huì)預(yù)留一部分容量空間

第二章 核心代碼第01節(jié) 成員變量

代碼

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 默認(rèn)初始容量大小, 默認(rèn)初始化容量為10 */private static final int DEFAULT_CAPACITY = 10;/** * 空數(shù)組。當(dāng)集合內(nèi)容置空的時(shí)候,底層使用空數(shù)組標(biāo)記 */private static final Object[] EMPTY_ELEMENTDATA = {};/*** 用于無參數(shù)構(gòu)造方法,創(chuàng)建對(duì)象的時(shí)候,使用這個(gè)數(shù)組定義。* 相比上面的數(shù)組 EMPTY_ELEMENTDATA 可以進(jìn)行區(qū)分,知道在添加元素的過程當(dāng)中,容量增加多少*/private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};/** * 保存ArrayList數(shù)據(jù)的數(shù)組,這個(gè)數(shù)組會(huì)不斷的改變,前面沒有被 final 修飾表示地址值會(huì)發(fā)生的變化 */transient Object[] elementData; // non-private to simplify nested class access/** * ArrayList 所包含的元素個(gè)數(shù),也就是在 ArrayList 集合底層,通過 size()方法,獲取到的元素個(gè)數(shù) */private int size; }

補(bǔ)充

1. ArrayList 集合底層存在6個(gè)成員變量還有一個(gè) private static final long serialVersionUID = 8683452581122892189L; 序列化使用, 目前針對(duì)于當(dāng)前的操作過程當(dāng)中, 暫時(shí)不會(huì)使用得到。2. ArrayList 集合當(dāng)中核心的兩個(gè)成員變量A. 底層維護(hù)數(shù)組 transient Object[] elementData;B. 存儲(chǔ)的元素個(gè)數(shù)private int size; 第02節(jié) 構(gòu)造方法

代碼

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 構(gòu)造一個(gè)初始長(zhǎng)度為0的空數(shù)組。 */ public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } /** * 在構(gòu)造方法當(dāng)中,傳遞一個(gè)參數(shù)集合c,將集合 c 轉(zhuǎn)換成為新的列表 * elementData 當(dāng)中的數(shù)據(jù),就是新集合存放的數(shù)據(jù) * c.toArray 就是將原始集合的數(shù)據(jù)取出 * 如果取出的集合長(zhǎng)度不為零的情況下,則復(fù)制 參數(shù)集合c 到 elementData 當(dāng)中 * 如果取出的集合長(zhǎng)度為零的情況下,則賦值為空數(shù)組 EMPTY_ELEMENTDATA */ public ArrayList(Collection<? extends E> c) {elementData = c.toArray();if ((size = elementData.length) != 0) { if (elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class);} else { this.elementData = EMPTY_ELEMENTDATA;} } /** * 指定參數(shù)的長(zhǎng)度大小 * 如果初始化的長(zhǎng)度大于0,則返回新的數(shù)組 * 如果初始化的長(zhǎng)度等于0,則返回默認(rèn)的空數(shù)組作為集合 this.elementData = EMPTY_ELEMENTDATA; * 如果初始化的長(zhǎng)度小于0,則出現(xiàn)非法參數(shù)異常 */ public ArrayList(int initialCapacity) {if (initialCapacity > 0) { this.elementData = new Object[initialCapacity];} else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA;} else { throw new IllegalArgumentException('Illegal Capacity: '+ initialCapacity);} }}

補(bǔ)充(一) 無參構(gòu)造創(chuàng)建對(duì)象

在java中ArrayList集合底層的擴(kuò)容原理

補(bǔ)充(二)帶參構(gòu)造創(chuàng)建對(duì)象,帶有int類型參數(shù)

在java中ArrayList集合底層的擴(kuò)容原理

補(bǔ)充(三)帶參構(gòu)造創(chuàng)建對(duì)象,帶有 集合類型參數(shù)

在java中ArrayList集合底層的擴(kuò)容原理

第三章 擴(kuò)容操作第01節(jié) 擴(kuò)容代碼

核心方法介紹

來自于 ArrayList 集合當(dāng)中的方法:1. public boolean add(E e){ ... }2. private void add(E e, Object[] elementData, int s){ .... }3. private Object[] grow()4. private Object[] grow(int minCapacity)來自于其他類當(dāng)中的功能1. Arrays.copyOf(elementData, newCapacity); 表示來自于 數(shù)組工具類 Arrays 當(dāng)中的 copyOf() 底層使用的是 System.arraycopy() 方法2. Math.max(DEFAULT_CAPACITY, minCapacity) 表示來自于 數(shù)學(xué)工具類 Math 當(dāng)中的 max() 方法,比較兩個(gè)數(shù)據(jù)最大值,取較大者,返回

核心代碼解釋

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 將指定的元素添加到此集合的末尾位置 * * modCount 是來自于父類的 AbstractList 當(dāng)中的成員變量 * add(e, elementData, size) 調(diào)用自己下面的重載方法 * return true 表示當(dāng)前的方法,一定可以添加成功,因?yàn)長(zhǎng)ist系列的集合添加數(shù)據(jù)都是允許成功的 true 如果是Set此方法返回false */ public boolean add(E e) {modCount++;add(e, elementData, size);return true; }/** * 這個(gè)方法是私有方法,僅僅自己可以使用。不允許外界訪問得到。便于上面的 add() 方法重載調(diào)用的 * 參數(shù)1: 表示需要添加的元素?cái)?shù)據(jù) E e * 參數(shù)2: 表示成員變量當(dāng)中, 需要維護(hù)管理的底層數(shù)組 Object[] elementData * 參數(shù)3: 表示成員變量當(dāng)中, size 容器 elementData 當(dāng)中存放的真實(shí)有效的數(shù)據(jù)個(gè)數(shù) * 方法里面的邏輯: 當(dāng)size已經(jīng)等于了內(nèi)部容器 elementData 的最大長(zhǎng)度,則準(zhǔn)備進(jìn)行擴(kuò)容的操作,擴(kuò)容使用 grow() 方法 * 無論上面是否進(jìn)行了擴(kuò)容的操作,這里都需要將添加的元素賦值到數(shù)組當(dāng)中,也就是 elementData[s] = e; * 并且將當(dāng)前成員變量的 size 在原始數(shù)據(jù)的基礎(chǔ)上面,增加1,表示添加了新的元素之后,長(zhǎng)度變化了,增加了1 */ private void add(E e, Object[] elementData, int s) {if (s == elementData.length) elementData = grow();elementData[s] = e;size = s + 1; }/** * 這個(gè)方法是私有方法,僅僅自己可以使用。不允許外界訪問得到。便于上面的 add() 方法調(diào)用的 * 方法的內(nèi)部調(diào)用了 ArrayList 當(dāng)中自己重載的方法 grow(size + 1) 同時(shí)傳入了參數(shù)。 * 這里參數(shù)的含義,表示的是 集合當(dāng)中總長(zhǎng)度 size + 1 表示在原始size基礎(chǔ)上增加1 * 方法的返回值是一個(gè)新的數(shù)組,也就是擴(kuò)容之后的數(shù)組 */private Object[] grow() {return grow(size + 1); } /** * 這個(gè)方法是私有方法,僅僅自己可以使用。不允許外界訪問得到。便于上面的 grow() 方法調(diào)用的 * 這里的參數(shù) minCapacity ,就是上面?zhèn)魅氲膮?shù) size + 1,也就是說最小容量 minCapacity = size + 1 * 方法體當(dāng)中的執(zhí)行邏輯: * 1. 獲取到了底層維護(hù)數(shù)組的長(zhǎng)度 int oldCapacity = elementData.length; 這里就是舊容量 oldCapacity * 2. 判斷舊容量 oldCapacity 是否小于0,也就是 else 的邏輯, *如果滿足 if 當(dāng)中的邏輯, 則表示 舊數(shù)組當(dāng)中存在數(shù)據(jù),并且 舊數(shù)組并不是 默認(rèn)容量的空數(shù)組地址值 *說明: 擴(kuò)容過的就不會(huì)是之前默認(rèn) DEFAULTCAPACITY_EMPTY_ELEMENTDATA 的地址值 *在這種情況下,就會(huì)得到 1.5被的數(shù)組長(zhǎng)度整數(shù),傳遞給 Arrays.copyOf()方法進(jìn)行擴(kuò)容,得到新數(shù)組返回 * 如果滿足 else 當(dāng)中的邏輯,則返回 DEFAULT_CAPACITY 和 minCapacity 較大值。 * 說明: DEFAULT_CAPACITY 值表示的是成員變量,默認(rèn)為 10 *說明: minCapacity 在低于10的時(shí)候,表示的會(huì)是擴(kuò)容添加的長(zhǎng)度1,2,3..9.10.11.. */ private Object[] grow(int minCapacity) {int oldCapacity = elementData.length;if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { int newCapacity = ArraysSupport.newLength(oldCapacity, minCapacity - oldCapacity, /* minimum growth */ oldCapacity >> 1 /* preferred growth */); return elementData = Arrays.copyOf(elementData, newCapacity);} else { return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];} }}

到此這篇關(guān)于在java中ArrayList集合底層的擴(kuò)容原理的文章就介紹到這了,更多相關(guān)ArrayList集合擴(kuò)容原理內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲天堂av资源在线观看| 亚洲欧美视频一区二区三区| 在线一区av| 国产日产高清欧美一区二区三区| 黄色不卡一区| 欧美日韩在线观看首页| 亚洲精品影视| 亚洲小说欧美另类婷婷| 欧美日韩一区二区高清| 日韩有码av| 蜜芽一区二区三区| 欧美成人久久| 欧美成人久久| 国产一区二区三区久久| 日本不卡一二三区黄网| 视频一区视频二区中文字幕| 香蕉成人久久| 亚洲欧美视频一区二区三区| 欧美成人久久| 一区免费在线| 成人精品中文字幕| 欧美男人天堂| 精品国产亚洲一区二区三区在线| 国产精品巨作av| 日本欧美在线| 7777精品| 久久国际精品| 国产精品黄网站| 麻豆理论在线观看| 国产精品久久久久久久久久10秀| 久久精品三级| 久草免费在线视频| 精品国产鲁一鲁****| 久久xxx视频| 国产一区二区三区久久| 国产不卡人人| 国产福利电影在线播放| 日本在线精品| 国产高清一区| 视频一区中文字幕| 伊人国产精品| 日韩美女精品| 欧美成人一二区| 国产精品丝袜在线播放| 欧美国产先锋| 中文字幕一区久| 国产资源在线观看入口av| а√天堂8资源在线| 99久久精品网| 欧美 日韩 国产一区二区在线视频| 亚洲一级黄色| 首页国产欧美日韩丝袜| 国产欧美69| 精品美女视频 | 成人精品久久| 999在线观看精品免费不卡网站| 日本aⅴ精品一区二区三区| 在线手机中文字幕| 亚洲开心激情| 日韩一区二区中文| 欧美日本不卡高清| 欧美日韩视频| 精品美女在线视频| 亚洲精品美女| 国内精品福利| 久久a爱视频| 免费在线观看视频一区| 四虎国产精品免费观看| 婷婷五月色综合香五月| 91精品国产成人观看| 国产欧美一区二区三区米奇| 999在线观看精品免费不卡网站| 国产一区二区三区成人欧美日韩在线观看| 亚洲成人va| 亚洲深爱激情| 欧美日韩免费看片| 欧美日本不卡高清| 欧美日韩四区| 不卡专区在线| 国产乱码精品一区二区三区亚洲人| 桃色一区二区| 久久中文欧美| 国产三级精品三级在线观看国产| 国产精品腿扒开做爽爽爽挤奶网站| 久草免费在线视频| 麻豆极品一区二区三区| 伊人国产精品| 不卡中文一二三区| 欧美精品高清| 成人在线丰满少妇av| 国产精品17p| 欧美日韩调教| 日韩欧美中文字幕在线视频| 亚洲欧美日韩高清在线| 欧美aa一级| 麻豆久久久久久久| 国产欧美日韩影院| 日韩av不卡在线观看| 亚洲永久精品唐人导航网址| 亚洲精品一二三区区别| 999久久久精品国产| 91日韩欧美| 日韩综合一区| 精品国产精品国产偷麻豆 | 天堂成人免费av电影一区| 亚洲特色特黄| 天堂日韩电影| 深夜视频一区二区| 国产精品专区免费| 老司机免费视频一区二区三区| 日韩激情av在线| 日本伊人久久| 青青青国产精品| 欧美日韩一区二区三区四区在线观看 | 国产亚洲一区二区三区啪| 亚洲一区二区动漫| 99国产精品久久久久久久| 日韩精品2区| 日韩在线观看| 日韩精品免费一区二区三区| sm久久捆绑调教精品一区| 欧美韩日一区| 日韩电影免费网站| 成人羞羞在线观看网站| 久久久久91| 欧美jjzz| 视频在线观看一区| 亚洲精品极品| 欧美日韩午夜| 欧美综合精品| 国产精品videossex久久发布 | 丝袜美腿亚洲一区二区图片| 久久国产成人| 亚洲69av| 国产精一区二区| 精品一二三区| 久久久国产精品一区二区中文| 久久精品123| 亚洲激情社区| 亚洲男人在线| 国产精品videossex久久发布| 动漫av一区| 欧美一区二区三区高清视频| 99久精品视频在线观看视频| 欧美不卡高清| 亚洲一区二区三区久久久| 日本免费一区二区视频| 国产精久久久| 欧美国产偷国产精品三区| 欧美日韩精品一区二区视频| 久久国产精品亚洲77777| 日韩精品久久久久久久软件91| 国产激情久久| 99精品视频在线观看免费播放| 久久福利毛片| 国产欧美精品久久| 久久影院午夜精品| 9色国产精品| 日韩国产在线观看一区| 久久久久亚洲精品中文字幕| 99精品视频在线观看免费播放| 蜜桃久久久久久久| 麻豆极品一区二区三区| 亚洲欧美综合| 日本中文字幕不卡| 精品亚洲a∨| 一区免费视频| 欧美日韩黄网站| 日韩欧美不卡| 视频一区中文字幕精品| 国产成人精品一区二区三区在线| 狠狠色狠狠色综合日日tαg| 欧美日韩中出| 伊伊综合在线| 蜜臀av亚洲一区中文字幕| 国产精品超碰| 91精品1区| 国产美女久久| 激情久久五月| 日本午夜免费一区二区| 日韩中文字幕高清在线观看| 美日韩精品视频| 国产精品不卡| 中文字幕中文字幕精品| 国产精品99视频| 亚洲影视一区| 日本精品在线中文字幕| 日韩精品国产精品| bbw在线视频| 中文字幕一区二区三区日韩精品 | 国模精品一区| 亚洲视频二区| 91精品韩国| 国产日韩1区| 亚洲黄页一区| 高清日韩欧美| 欧美影院精品| 欧美精品一区二区久久| 欧美激情精品| 亚洲一二av|