精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官讓我聊聊 ArrayList 解決了數組的哪些問題

開發 前端
在面試中經常會問在java中數組長度和ArrayList中的size的區別?通過下面的代碼我們其實已經看出來數組獲取其長度的時候永遠是在聲明的時候定義的長度,即使數組中只有一個元素,通過下面的輸出有人會問arr[1]輸出的是0,這個是因為 int 類型在java中為基本類型所以在初始化數組時會默認用0填充

數組簡介

數組對于我們來說并不陌生,在內存中是一塊連續的內存空間,通過下標可以隨機訪問數組元素 如圖一所示,而在JDK中提供了功能更加強大的ArrayList其底層是基于數據實現的,為什么JDK已經提供了數據還要使用ArrayList呢?我們通過比較兩者之間的差異來聊聊ArrayList的優勢

java數組中如何獲取數組實際元素

在面試中經常會問在java中數組長度和ArrayList中的size的區別?

通過下面的代碼我們其實已經看出來數組獲取其長度的時候永遠是在聲明的時候定義的長度,即使數組中只有一個元素,通過下面的輸出有人會問arr[1]輸出的是0,這個是因為 int 類型在java中為基本類型所以在初始化數組時會默認用0填充

在ArrayList中的長度為list中實際元素的數量,這一點跟數組有著明顯的差別,具體如何實現后面會根據源碼分析

數組刪除元素和添加元素

在數組中刪除一個元素后需要移動元素保證數組的連續性,如果刪除的是數組最后一個元素則不需要移動,如果刪除了下標為3的元素后使數組連續則需要將3號元素后的元素依次向前移動

刪除元素后下標為7的元素不再含有有效元素,如果我們使用的數組刪除數據后這些移動的操作需要我們寫相關的代碼來完成,使用ArrayList刪除與數據移動都將自動完成不需要我們手動處理

在數組中添加元素如果插入元素后元素個數超過了數組的長度則會報數組越界的錯誤,這是因為數組的容量是固定的不能動態的增加

如下圖原數組容量為8如果想要成功添加第9個元素則需要將原來數組容量擴大為9然后移動指定位置的元素并將9插入,正因為這樣數組不具有動態性因此在使用數據時需要額外考慮很多數組本身的問題導致不能專注于核心代碼的編寫

ArrayList的出現正式解決了數組存在以下問題

  • 動態擴容
  • 有效數據長度
  • 增加刪除元素后數據移動
  • 數據遍歷

結合ArrayList一些面試問題來看下具體源代碼

  • ArrayList的默認初始化容量
  • 何時擴容
  • 擴容容量大小
  • 遍歷刪除fast fail原理
  • 迭代器刪除為什么不越界

首先看下ArrayList的兩個重要的屬性

  • elementData 存儲數據的數組
  • size 數組中實際元素個數
  1. transient Object[] elementData; // non-private to simplify nested class access 
  2.  /** 
  3.   * The size of the ArrayList (the number of elements it contains). 
  4.   * 
  5.   * @serial 
  6.   */ 
  7.  private int size

ArrayList 的構造函數分為有參和無參兩種方式

  • 無參構造函數為ArrayList()其初始化后并未分配內存空間而是在第一次add操作時分配
  • 有參構造函數ArrayList(int initialCapacity)初始化即分配制定大小內存
  • 有參構造函數ArrayList(Collection c) 初始化即分配內存

問題一: 無參初始化默認容量是多少,何時擴容,擴容大小為多少都在下面的注釋中可以找到

具體分析請看下面注釋

  1. // 默認初始化elementData為空數組 
  2. private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 
  3. public ArrayList() { 
  4.     this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; 
  5. //接下來進行add操作 
  6. public boolean add(E e) { 
  7.     // 檢查當前數據容量是否充足 
  8.     ensureCapacityInternal(size + 1);  // Increments modCount!! 
  9.     // size 自增可以保證有效元素的個數 
  10.     elementData[size++] = e; 
  11.     return true
  12.  } 
  13. //計算容量大小主要用于默認初始化第一次add操作 
  14. private static int calculateCapacity(Object[] elementData, int minCapacity) { 
  15.     //默認初始化時elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA 
  16.     // 此處返回默認容量DEFAULT_CAPACITY,此值大小為10 
  17.     if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { 
  18.         return Math.max(DEFAULT_CAPACITY, minCapacity); 
  19.      } 
  20.     return minCapacity; 
  21. private void ensureCapacityInternal(int minCapacity) { 
  22.      ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); 
  23. private void ensureExplicitCapacity(int minCapacity) { 
  24.      modCount++; 
  25.     //檢查是否擴容,如果當前容量大于數組長度進行擴容 
  26.     // overflow-conscious code 
  27.      if (minCapacity - elementData.length > 0) 
  28.         grow(minCapacity); 
  29. //根據原來數據長度進行擴容 
  30. //oldCapacity >> 1 位運算相當于 oldCapacity=oldCapacity/2 
  31. //新容量為 newCapacity = oldCapacity + (oldCapacity >> 1);即為原來的1.5倍 
  32. //將老數組中的數據移動到新數組中 
  33. //此處解釋下為何為1.5倍,這是一種折中是對擴容次數和空間大小的折中,如果擴容次數太多會降低效率如果空間太大會浪費空間 
  34. private void grow(int minCapacity) { 
  35.    // overflow-conscious code 
  36.    int oldCapacity = elementData.length; 
  37.    int newCapacity = oldCapacity + (oldCapacity >> 1); 
  38.    if (newCapacity - minCapacity < 0) 
  39.       newCapacity = minCapacity; 
  40.    if (newCapacity - MAX_ARRAY_SIZE > 0) 
  41.       newCapacity = hugeCapacity(minCapacity); 
  42.       // minCapacity is usually close to size, so this is a win: 
  43.       elementData = Arrays.copyOf(elementData, newCapacity); 

問題二:數據遍歷,fast-fail,迭代器刪除為什么不越界

在如下代碼注釋中將找到答案

  • ArrayList 遍歷支持for,foreach,迭代器遍歷
  • fail-fast 機制是java集合(Collection)中的一種錯誤機制。當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件。

例如:當某一個線程A通過iterator去遍歷某集合的過程中,若該集合的內容被其他線程所改變了;那么線程A訪問集合時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。

  1. //ArrayList 迭代器是通過兩個游標數組的下標 
  2.  private class Itr implements Iterator<E> {         // 代表下一個元素的游標 
  3.         int cursor;       // index of next element to return 
  4.         int lastRet = -1; // index of last element returned; -1 if no such 
  5.         int expectedModCount = modCount; 
  6.         Itr() {}        // 如果游標不等于size 代表還有下一個元素        public boolean hasNext() {            return cursor != size
  7.         }       //        @SuppressWarnings("unchecked"
  8.         public E next() { 
  9.             checkForComodification();            int i = cursor
  10.             // 在此處判斷當前游標是超過了數組有效元素個數 
  11.             if (i >= size
  12.                 throw new NoSuchElementException();            Object[] elementData = ArrayList.this.elementData;            //檢查是否數組越界 
  13.             if (i >= elementData.length) 
  14.                 throw new ConcurrentModificationException();            cursor = i + 1; 
  15.             // 更新lastRet游標為當前數組下標 
  16.             return (E) elementData[lastRet = i]; 
  17.         }        public void remove() {         // 檢查刪除元素下標是否合法 
  18.             if (lastRet < 0) 
  19.                 throw new IllegalStateException();            checkForComodification();            try {            // 刪除原數組中制定下標元素 
  20.                 ArrayList.this.remove(lastRet);                //更新游標 
  21.                 cursor = lastRet;                lastRet = -1; 
  22.                 expectedModCount = modCount;            } catch (IndexOutOfBoundsException ex) {                throw new ConcurrentModificationException();            }        }       } 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2019-04-29 14:59:41

Tomcat系統架構

2022-05-23 08:43:02

BigIntJavaScript內置對象

2023-01-17 17:54:47

MQ數據丟失

2025-03-10 08:00:05

2025-07-25 01:45:00

RAG模型技術

2025-07-18 07:19:00

2024-11-14 14:53:04

2021-07-13 07:52:03

ReactHooks組件

2020-05-22 08:11:48

線程池JVM面試

2021-09-28 13:42:55

Chrome Devwebsocket網絡協議

2021-07-29 07:55:20

React Fiber架構引擎

2021-12-02 08:19:06

MVCC面試數據庫

2022-04-10 18:10:24

CURD鏈表

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2025-03-11 09:19:53

2020-09-08 06:43:53

B+樹面試索引

2022-11-15 17:45:46

數據庫MySQL

2020-07-02 07:52:11

RedisHash映射

2021-05-28 07:12:58

Mybatis面試官Java

2019-08-23 09:20:35

Spring 5編程Java
點贊
收藏

51CTO技術棧公眾號

九色porny自拍| 精品久久精品久久| 免费一级肉体全黄毛片| 欧美电影免费网站| 欧美主播一区二区三区美女| 一区二区在线不卡| 乱色精品无码一区二区国产盗| 蘑菇福利视频一区播放| 久久精品国产99国产精品澳门| 精品人妻二区中文字幕| 欧美日韩尤物久久| 亚洲一区二三区| 亚洲欧洲久久| 午夜视频免费看| 久久国产精品99久久久久久老狼 | 成人网站免费观看| 久久av影院| 变态调教一区二区三区| 国产精品亚洲а∨天堂免在线| 77777亚洲午夜久久多人| 男人的午夜天堂| 亚洲另类av| 日韩一级精品视频在线观看| 午夜dv内射一区二区| av影片在线| 亚洲欧美另类图片小说| 日韩欧美一区二区三区四区五区| 日韩av在线看免费观看| caoporn成人免费视频在线| 欧美日韩另类国产亚洲欧美一级| 大陆极品少妇内射aaaaa| bt在线麻豆视频| 国产精品初高中害羞小美女文| 久久大片网站| 人妻少妇精品无码专区久久| 国产乱理伦片在线观看夜一区| 国产精品日韩欧美大师| 97久久久久久久| 亚洲国产清纯| 欧美极品美女视频网站在线观看免费| 亚洲色图27p| 禁果av一区二区三区| 日韩av一区在线| 捆绑裸体绳奴bdsm亚洲| 一区二区三区欧洲区| 7777精品伊人久久久大香线蕉超级流畅| 成人在线观看黄| 欧美gv在线| 狠狠干狠狠久久| 3d动漫一区二区三区| 欧美6一10sex性hd| 亚洲精品免费看| 青少年xxxxx性开放hg| 日本在线观看网站| 亚洲欧美日韩中文字幕一区二区三区 | 欧一区二区三区| 国产成人丝袜美腿| 欧美日韩一区二区欧美激情| 人妻少妇精品无码专区二区| 久久大胆人体| 亚洲国产cao| 成人毛片一区二区| 两个人看的在线视频www| 五月婷婷另类国产| 日韩av中文字幕第一页| а√在线中文在线新版| 无码av免费一区二区三区试看| 成人在线观看你懂的| 2001个疯子在线观看| 亚洲电影一区二区三区| 免费成人在线视频网站| 欧亚一区二区| 欧美伊人久久大香线蕉综合69| 9久久婷婷国产综合精品性色| 欧美成人一二区| 欧美精品久久一区二区三区| 成人免费播放视频| 欧美一区 二区| 亚洲小视频在线| 极品美妇后花庭翘臀娇吟小说| 一本一本久久a久久综合精品| 欧美丰满片xxx777| 韩国av中文字幕| 免费人成精品欧美精品| 亚洲最大福利网站| 亚洲av成人无码网天堂| 欧美国产一区视频在线观看| 欧美另类videos| 麻豆视频在线观看免费网站黄| 欧洲国内综合视频| 欧美性猛交xx| 嫩草影视亚洲| 欧美成人亚洲成人| 手机看片久久久| 国产最新精品免费| 久久天堂国产精品| 大片免费在线看视频| 欧美午夜精品久久久久久浪潮| 香港日本韩国三级网站| 麻豆精品99| 日韩亚洲综合在线| 欧美一级高清免费| 国产乡下妇女做爰视频| 日韩中文字幕一区二区三区| www.久久久| 福利视频在线导航| 亚洲大片一区二区三区| mm131国产精品| 免费看成人人体视频| 久久这里只有精品视频首页| 亚洲GV成人无码久久精品| 韩国毛片一区二区三区| 免费观看成人在线| 欧美6一10sex性hd| 777午夜精品免费视频| 这里只有久久精品| 日韩视频二区| 亚洲最大的av网站| 中文字幕在线观看日本| 狠狠久久亚洲欧美专区| 欧美xxxx日本和非洲| 欧美成人自拍| 国产精品久久久久久久久久99| 视频一区 中文字幕| 亚洲免费观看高清完整版在线观看熊| 91在线视频观看免费| 欧美电影在线观看完整版| 超薄丝袜一区二区| 在线观看国产精品视频| 久久无码av三级| 给我免费播放片在线观看| 国产一区二区久久久久| xxxx欧美18另类的高清| 国产免费一区二区三区四区五区| av在线不卡电影| 激情六月天婷婷| 精品国产麻豆| 久热国产精品视频| 国产精品久久久国产盗摄| 欧美国产国产综合| 91视频免费版污| 精品美女久久久| 国产激情久久久| 国产乱视频在线观看| 色吊一区二区三区| www在线观看免费视频| 午夜在线精品| 日本不卡一区| 香蕉免费毛片视频| 欧美人妖视频| 午夜精品福利电影| 五月婷婷久久久| 疯狂蹂躏欧美一区二区精品| 麻豆国产精品一区| 麻豆9191精品国产| 日本一区二区在线视频| 国产精品久久亚洲不卡| 国产一区二区三区久久精品 | 狠狠干一区二区| 成入视频在线观看| 亚洲精品中文字| 无码人妻精品一区二区蜜桃色欲| 国产日韩一级二级三级| 亚洲色图久久久| 91久久夜色精品国产按摩| 91最新在线免费观看| 肉肉视频在线观看| 亚洲精品国产精品乱码不99按摩| 欧美一二三区视频| 久久久久国产精品厨房| 黄色三级视频片| 天天射—综合中文网| dy888夜精品国产专区| 黄页网站大全在线免费观看| 精品视频偷偷看在线观看| 天天操天天干天天摸| 亚洲欧洲99久久| 天天躁日日躁狠狠躁av| 久久精品毛片| 99久re热视频精品98| 欧美综合精品| 国产精品一区二区三区免费视频| 主播国产精品| 亚洲欧美日韩直播| 国产女人高潮时对白| 偷拍一区二区三区| 五月激情四射婷婷| 国产激情偷乱视频一区二区三区| 97av视频在线观看| 91精品国产视频| 久久久免费看| 精品一区二区三区四区五区| 8x拔播拔播x8国产精品| 日本不卡不卡| 亚洲黄页网在线观看| 中文字幕无线码一区| 亚洲五月六月丁香激情| 国产精品91久久久久久| 成人午夜电影在线观看| 日韩午夜电影在线观看| 无码人妻aⅴ一区二区三区有奶水| 亚洲色图欧美激情| 成人免费看aa片| 国产精品羞羞答答xxdd| 黄色成人免费看| 亚洲激情专区| 中文字幕第50页| 免费看成人哺乳视频网站| 国产99视频精品免费视频36| 日本国产欧美| 韩国美女主播一区| 成人短视频在线观看| 在线播放日韩av| 日韩精品视频无播放器在线看 | 亚洲国产精品精华液网站| 免费成人深夜天涯网站| 91原创在线视频| 香蕉久久久久久av成人| 久久成人免费网站| www黄色在线| 国产九九精品| 国产精品又粗又长| 亚洲国产一区二区在线观看| 亚欧精品在线| 欧美精品一区二区三区中文字幕| 精品久久sese| 欧美wwwsss9999| 国产精品成人一区二区三区| 麻豆国产一区| 91天堂在线视频| 外国成人毛片| 91精品久久久久久久久久久久久| 国产亚洲一区二区手机在线观看| 26uuu日韩精品一区二区| 国产伦理精品| 性视频1819p久久| 成人性生交大片免费看网站| 欧美精品日韩三级| av毛片在线播放| 久久久999精品视频| 美女写真理伦片在线看| 久久久精品在线| 蜜桃视频在线观看www社区| 色阁综合伊人av| 欧美高清视频| 久久伊人91精品综合网站| 久久精品视频观看| 久久视频在线视频| 18加网站在线| 欧美精品video| 伊人成年综合网| 玖玖玖国产精品| 中国丰满熟妇xxxx性| 伊人久久综合| 每日在线更新av| 男人天堂欧美日韩| 91人人澡人人爽人人精品| 蜜桃一区二区三区在线观看| 在线观看国产一级片| 精品一区二区三区蜜桃| 欧美高清精品一区二区| 国产成人av自拍| 伊人网综合视频| 国产午夜精品在线观看| 国产一二三四视频| 亚洲女与黑人做爰| 国产亚洲欧美精品久久久久久| 午夜精品在线视频一区| 黄瓜视频在线免费观看| 欧美人伦禁忌dvd放荡欲情| 99热这里只有精品在线| 精品国产麻豆免费人成网站| 日韩美女一级视频| 色狠狠av一区二区三区香蕉蜜桃| 1024在线播放| 91po在线观看91精品国产性色| 日韩中文影院| 91久久久久久久久| 加勒比色老久久爱综合网| 日本一区免费在线观看| 图片区亚洲欧美小说区| 日韩 欧美 视频| 日本欧美一区二区| av影片在线播放| 久久无码av三级| avove在线播放| 日本精品一区二区三区四区的功能| 91无套直看片红桃| 亚洲电影中文字幕| 91在线看黄| 亚州精品天堂中文字幕| 99九九久久| 国产一区国产精品| 久久一区二区三区喷水| cao在线观看| 久久精品国产成人一区二区三区| 亚洲无人区码一码二码三码| 国产人妖乱国产精品人妖| 亚洲国产精品久| 在线观看一区不卡| 高h调教冰块play男男双性文| 中文字幕欧美日韩精品| 成人三级高清视频在线看| 国产在线高清精品| 要久久爱电视剧全集完整观看 | 亚洲国产专区校园欧美| 美女少妇一区二区| 99精品国产视频| 青青草原免费观看| 欧美三级视频在线| 婷婷亚洲一区二区三区| 欧美裸身视频免费观看| 99久久精品一区二区成人| 久久久亚洲综合网站| 黄色av日韩| 老司机久久精品| 欧美国产国产综合| 国产伦精品一区二区三区视频我| 精品精品国产高清a毛片牛牛 | 精品国精品国产自在久不卡| 尤物tv国产一区| 97se综合| 精品国产免费一区二区三区 | 精品亚洲一区二区三区四区| www国产精品av| www欧美com| 欧美日韩在线播放三区四区| 日韩电影网址| 性欧美视频videos6一9| 一区二区三区免费在线看| 大陆极品少妇内射aaaaaa| 老司机免费视频一区二区三区| 扒开jk护士狂揉免费| 午夜精品福利在线| 好吊视频一二三区| 久久免费视频观看| 91精品尤物| 黄色三级中文字幕| 国产99精品国产| 免费三片在线播放| 日韩美女一区二区三区四区| 亚洲丝袜精品| 福利视频一区二区三区| 好吊视频一区二区三区四区| 日本亚洲一区二区三区| ww亚洲ww在线观看国产| 日本视频免费在线| 日韩精品在线观看一区| 中文字幕在线直播| 久久www免费人成精品| 麻豆精品网站| 97在线观看免费视频| 欧美亚洲高清一区二区三区不卡| xxxxx日韩| 91精品视频播放| 欧美三区视频| 欧美肉大捧一进一出免费视频| 五月天久久比比资源色| 欧美大片aaa| 国产精品久久久一区| 99久久99久久精品国产片桃花 | 精品久久亚洲| 亚洲精品少妇一区二区| www.av亚洲| 国产黄色免费视频| 久久久精品电影| 动漫av一区| 妓院一钑片免看黄大片| 国产精品国产三级国产三级人妇 | 深夜精品寂寞黄网站在线观看| 日韩三区四区| 久久综合久久网| 国产日韩三级在线| 国产成年妇视频| 97在线观看免费| 日韩电影免费网址| wwwxxx色| 欧美性猛交xxxx乱大交极品| 日本视频在线播放| 国产精品一区二区三区免费| 免费日韩av片| 男人在线观看视频| 日韩av一卡二卡| 精品99re| 999精品网站| 亚洲一区中文在线| 麻豆导航在线观看| 91热福利电影| 裸体素人女欧美日韩| avove在线播放| 亚洲一区二区黄| 粉嫩的18在线观看极品精品| 亚州精品一二三区| 亚洲国产综合人成综合网站| av在线电影网| 久久涩涩网站| 高清成人免费视频| 日本妇乱大交xxxxx| 韩国精品美女www爽爽爽视频| 91欧美在线|