本篇分析ArrayList的源碼,在分析之前先跟大家談一談數組。數組可能是我們最早接觸到的數據結構之一,它是在內存中劃分出一塊連續的地址空間用來進行元素的存儲,由于它直接操作內存,所以數組的性能要比集合類更好一些,這是使用數組的一大優勢。但是我們知道數組存在致命的缺陷,就是在初始化時必須指定數組大小,并且在后續操作中不能再更改數組的大小。在實際情況中我們遇到更多的是一開始并不知道要存放多少元素,而是希望容器能夠自動的擴展它自身的容量以便能夠存放更多的元素。ArrayList就能夠很好的滿足這樣的需求,它能夠自動擴展大小以適應存儲元素的不斷增加。它的底層是基于數組實現的,因此它具有數組的一些特點,例如查找修改快而插入刪除慢。本篇我們將深入源碼看看它是怎樣對數組進行封裝的。首先看看它的成員變量和三個主要的構造器。
//默認初始化容量 private static final int DEFAULT_CAPACITY = 10; //空對象數組 private static final Object[] EMPTY_ELEMENTDATA = {}; //對象數組 private transient Object[] elementData; //集合元素個數 private int size; //傳入初始容量的構造方法 public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } //新建指定容量的Object類型數組 this.elementData = new Object[initialCapacity]; } //不帶參數的構造方法 public ArrayList() { super(); //將空的數組實例傳給elementData this.elementData = EMPTY_ELEMENTDATA; } //傳入外部集合的構造方法 public ArrayList(Collection<? extends E> c) { //持有傳入集合的內部數組的引用 elementData = c.toArray(); //更新集合元素個數大小 size = elementData.length; //判斷引用的數組類型, 并將引用轉換成Object數組引用 if (elementData.getClass() != Object[].class) { elementData = Arrays.copyOf(elementData, size, Object[].class); } }
網站欄目:Java集合系列之ArrayList源碼分析-創新互聯
新聞來源:http://vcdvsql.cn/article24/cscsce.html
成都網站建設公司_創新互聯,為您提供外貿建站、品牌網站設計、企業建站、商城網站、網站營銷、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯