亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

對Java ArrayList的自動擴容機制示例講解

2024-07-14 08:42:32
字體:
來源:轉載
供稿:網友

注意:

不同的JDK版本的擴容機制可能有差異

實驗環境:JDK1.8

擴容機制:

當向ArrayList中添加元素的時候,ArrayList如果要滿足新元素的存儲超過ArrayList存儲新元素前的存儲能力,ArrayList會增強自身的存儲能力,已達到存儲新元素的要求

ArrayList:本質通過內部維護的數組對象進行數據存儲

①:分析ArrayList的add(E)方法

 public boolean add(E e) {  ensureCapacityInternal(size + 1); // Increments modCount!!  elementData[size++] = e;  return true; }

分析:add方法首先通過ensureCapacityInternal()方法確保當前ArrayList維護的數組具有存儲新元素的能力,經過處理之后將元素存儲在數組elementData的尾部

elementData:ArrayList真正用于存儲元素的數組

②:分析ensureCapacityInternal方法

private void ensureCapacityInternal(int minCapacity) {  if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {   minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);  }  ensureExplicitCapacity(minCapacity); }

分析:ensureCapacityInternal判斷ArrayList默認的元素存儲數據是否為空,為空則設置最小要求的存儲能力為必要存儲的元素和默認存儲元素個數的兩個數據之間的最大值,然后調用ensureExplicitCapacity方法實現這種最低要求的存儲能力

注意:ArrayList的存儲空間并不是需要一個創建一個,而是分階段性的創建,一般會預留存儲空間。

例如,如果ArrayList需要存儲10個元素,恰好ArrayList只能存儲6個元素,剩余4個元素無法存儲,ArrayList可能會一次性擴展10個元素,這種ArrayList就有20個元素的存儲能力,在存儲能力范圍內,下次再存放元素,就不需要再次擴容

③:分析ensureExplicitCapacity方法:

 private void ensureExplicitCapacity(int minCapacity) {  modCount++;  // overflow-conscious code  if (minCapacity - elementData.length > 0)   grow(minCapacity); }

分析:如果最低要求的存儲能力>ArrayList已有的存儲能力,這就表示ArrayList的存儲能力不足,因此需要調用 grow();方法進行擴容

④:分析grow()方法

private void grow(int minCapacity) {  // overflow-conscious code  int oldCapacity = elementData.length;  int newCapacity = oldCapacity + (oldCapacity >> 1);  if (newCapacity - minCapacity < 0)   newCapacity = minCapacity;  if (newCapacity - MAX_ARRAY_SIZE > 0)   newCapacity = hugeCapacity(minCapacity);  // minCapacity is usually close to size, so this is a win:  elementData = Arrays.copyOf(elementData, newCapacity); }

分析:當ArrayList擴容的時候,首先會設置新的存儲能力為原來的1.5倍

 int newCapacity = oldCapacity + (oldCapacity >> 1);

如果擴容之后還是不能滿足要求則MAX_ARRAY_SIZE比較,求取最大值,

如果MAX_ARRAY_SIZE大小的能力還是不能滿足則通過hugeCapacity()方法獲取ArrayList能允許的最大值:

private static int hugeCapacity(int minCapacity) {  if (minCapacity < 0) // overflow   throw new OutOfMemoryError();  return (minCapacity > MAX_ARRAY_SIZE) ?   Integer.MAX_VALUE :   MAX_ARRAY_SIZE; }

從hugeCapacity方法看出,ArrayList最大的存儲能力:存儲元素的個數為整型的范圍。

確定ArrayList擴容之后最新的可存儲元素個數時,調用

elementData = Arrays.copyOf(elementData, newCapacity); 

實現elementData數組的擴容,整個流程就是ArrayList的自動擴容機制工作流程

擴展:

ArrayList的自動擴容機制底層借助于System實現

 public static native void arraycopy (Object src, int srcPos, Object dest, int destPos, int length);

arraycopy標識為native意味JDK的本地庫,不可避免的會進行IO操作,如果頻繁的對ArrayList進行擴容,毫不疑問會降低ArrayList的使用性能,因此當我們確定添加元素的個數的時候,我們可以事先知道并指定ArrayList的可存儲元素的個數,這樣當我們向ArrayList中加入元素的時候,就可以避免ArrayList的自動擴容,從而提高ArrayList的性能

ArrayList含參構造函數:初始化時指定存儲元素的能力:

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

以上這篇對Java ArrayList的自動擴容機制示例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧亚精品中文字幕| 国产精品久久久久免费a∨| 亚洲天堂免费在线| 国产成人精品最新| 久久影视电视剧免费网站清宫辞电视| 插插插亚洲综合网| 色偷偷噜噜噜亚洲男人的天堂| 欧美日韩国产精品一区二区三区四区| 欧美色欧美亚洲高清在线视频| 亚洲一区二区三| 亚洲男人第一av网站| 欧美日韩人人澡狠狠躁视频| 日韩电影视频免费| 成人av在线网址| 日韩精品在线免费| 日本精品在线视频| 欧美黑人又粗大| 欧美视频在线观看免费| 欧美日韩免费在线观看| 久久夜精品va视频免费观看| 亚洲全黄一级网站| 成人黄色在线免费| 性色av一区二区三区红粉影视| 亚洲欧美综合另类中字| 亚洲精品久久久久中文字幕二区| 色播久久人人爽人人爽人人片视av| 欧美人交a欧美精品| 日韩一区在线视频| 在线观看欧美www| 国产成人avxxxxx在线看| 亚洲第一天堂无码专区| 欧美做受高潮1| 亚洲色图日韩av| 日韩av电影国产| 国产精品成人va在线观看| 亚洲专区在线视频| 欧美在线精品免播放器视频| 亚洲精品福利在线| 欧美日本精品在线| 亚洲欧美中文日韩v在线观看| 亚洲三级免费看| 欧美激情精品久久久久久久变态| 国产国产精品人在线视| 日韩高清a**址| 精品视频久久久久久久| 欧美精品一区二区免费| 美女久久久久久久| 91综合免费在线| 亚州国产精品久久久| 亚洲18私人小影院| 欧美成人网在线| 中文字幕精品影院| 91黑丝高跟在线| 欧美激情国产高清| 91网站免费看| 色综合色综合久久综合频道88| 国产盗摄xxxx视频xxx69| 国产69精品久久久| 日韩免费在线看| 中文亚洲视频在线| 欧美日韩亚洲视频| 美日韩精品免费观看视频| 久久亚洲精品国产亚洲老地址| 国产精品久久久一区| 精品国产一区二区三区四区在线观看| 亚洲网址你懂得| 亚洲xxxx在线| 98精品国产自产在线观看| 成人国产精品久久久久久亚洲| 亚洲人成网在线播放| 精品丝袜一区二区三区| 久久久久女教师免费一区| 中文字幕国产日韩| 亚洲欧美一区二区三区在线| 91丝袜美腿美女视频网站| 亚洲国产精品资源| 久久久久999| 92看片淫黄大片看国产片| 91在线视频导航| 久久好看免费视频| 情事1991在线| 欧美精品手机在线| 最近2019年手机中文字幕| 7777免费精品视频| 久久久久久中文字幕| 在线色欧美三级视频| 亚洲午夜精品久久久久久性色| 国产精品偷伦视频免费观看国产| 国产综合在线观看视频| 成人黄色在线观看| 国产精品成人一区二区三区吃奶| 最近2019中文字幕大全第二页| 欧美老女人在线视频| www国产精品com| 久久中文字幕一区| 国产精品偷伦免费视频观看的| 亚洲国产精品久久久久久| 亚洲色图av在线| 日本道色综合久久影院| 国产精品色午夜在线观看| 91精品国产高清自在线| 欧美夜福利tv在线| 97国产suv精品一区二区62| 136fldh精品导航福利| 成人亲热视频网站| 欧美精品在线播放| 国产亚洲xxx| 亚洲精品综合久久中文字幕| 国产精品午夜一区二区欲梦| xvideos亚洲人网站| 97在线免费观看| 国产午夜精品理论片a级探花| 国产精品视频999| 国产精品尤物福利片在线观看| 高清欧美性猛交xxxx黑人猛交| 欧美影院久久久| 国产成人av在线播放| 日韩在线观看av| 亚洲女同性videos| 亚洲国产高清自拍| 日韩欧美黄色动漫| 日韩小视频在线观看| 久精品免费视频| 日韩高清不卡av| 国产精品69久久| 欧美日韩在线视频观看| 欧美人与物videos| 国产精品6699| 欧美日韩在线免费观看| 亚洲一区二区三区四区视频| 国产精品www色诱视频| 国产午夜精品全部视频播放| 国产精品九九久久久久久久| 欧美成人中文字幕| 亚洲色图在线观看| 国产精品最新在线观看| 91av在线视频观看| 成人网在线观看| 精品亚洲va在线va天堂资源站| 国产精品wwww| 欧美在线观看一区二区三区| 欧美精品18videos性欧美| 性色av一区二区三区在线观看| 亚洲一区二区中文字幕| 欧美最猛性xxxxx免费| 国产精品久久久久福利| 中文字幕精品av| 亚洲在线观看视频网站| 福利精品视频在线| 亚洲色图在线观看| 日韩精品视频免费专区在线播放| 国产精品久久电影观看| 国产精品免费电影| 精品一区二区三区三区| 欧美电影《睫毛膏》| 国产精品香蕉av| 国产精品美女在线观看| 成人精品久久一区二区三区| 国内偷自视频区视频综合| 4438全国亚洲精品在线观看视频| 国产一区二区三区三区在线观看| 欧美黑人一级爽快片淫片高清| 精品偷拍各种wc美女嘘嘘| 97超碰国产精品女人人人爽|