JAVA_ArrayList和HashSet

來源:互聯網
上載者:User

標籤:from   而在   font   inflate   依次   UI   array   pad   nested   

  • ArrayList

ArrayList在Java中主要是以線性表的形式進行儲存,其本質是數組,不過相對於數組的長度不可變這一缺點,其實行了長度可變策略,使你在使用時,感覺到其就是一個無限長度的數組,而在底層中,則是通過動態增加長度來實現的,ArrayList就像是排隊,沒來一個對象或者元素,都會被添加到末尾位置(預設情況下),當然也免不了熟人插隊的情況,此時就要指定相應位置,位置之前的元素位置不變,位置之後的元素依次後遺一位。


ArrayLsit.class源碼解析

由於源碼函數較多,這裡通過一個列子來解析一下背後的原理就行了。

public class ArrayListAndHashSet {    public static void main(String[] args) {        Person p1 = new Person("Jim", "One");        Person p2 = new Person("Bob", "two");        Person p3 = new Person("Jim", "One");        // 測試List        List<Person> persons = new ArrayList<>();        persons.add(p1);        persons.add(p2);        persons.add(p3);        persons.add(p1);        System.out.println("persons.size() = " + persons.size());
    • List<Person> presons = new ArrayList<>();

這句執行了ArrayList的無參建構函式:

/** * Constructs an empty list with an initial capacity of ten. */public ArrayList() {    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}

通過無參建構函式,我們可以發現將elementData賦值為了DEFAULTCAPACITY_EMPTY_ELEMENTDATA,這個常量在源碼中代表的含義是:

/** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

通過注釋我們可以發現其是一個空的執行個體對象,為了和EMPTY_ELEMENTDATA進行區分用的,

然後是我們的elementData,通過注釋可發現,當第一個元素被加進來的時候,數組的緩衝長度將會變成DEFAULT_CAPACITY

/** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. Any * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA * will be expanded to DEFAULT_CAPACITY when the first element is added. */transient Object[] elementData; // non-private to simplify nested class access

DEFAULT_CAPACITY的預設值是10

/** * Default initial capacity. */private static final int DEFAULT_CAPACITY = 10;






  • HashSet

JAVA_ArrayList和HashSet

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.