<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### ArrayList * ArrayList類支持能夠按需增長的動態數組,增長策略oldCapacity + \(oldCapacity &gt;&gt; 1\)即原來的長度+原長度的一半 ``` int newCapacity = oldCapacity + (oldCapacity >> 1); ``` * 默認容量大小是10 ``` private static final int DEFAULT_CAPACITY = 10; ``` ### 主要API * **add\(E e\)** add主要的執行邏輯如下: 1)確保數組已使用長度(size)加1之后足夠存下下一個數據 2)修改次數modCount 標識自增1,如果當前數組已使用長度(size)加1后的大于當前的數組長度,則調用grow方法,增長數組,grow方法會將當前數組的長度變為原來容量的1.5倍。 ``` private void ensureExplicitCapacity(int minCapacity) { modCount++; // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity); } ``` 3)確保新增的數據有地方存儲之后,則將新元素添加到位于size的位置上。 4)返回添加成功布爾值; ``` public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } ``` * **add\(int index, E element\)** ![](../assets/20180411104349001.png) 這個方法其實和上面的add類似,該方法可以按照元素的位置,指定位置插入元素,具體的執行邏輯如下: 1)確保數插入的位置小于等于當前數組長度,并且不小于0,否則拋出異常 2)確保數組已使用長度(size)加1之后足夠存下下一個數據 3)修改次數modCount標識自增1,如果當前數組已使用長度(size)加1后的大于當前的數組長度,則調用grow方法,增長數組 4)grow方法會將當前數組的長度變為原來容量的1.5倍。 5)確保有足夠的容量之后,使用System.arraycopy 將需要插入的位置(index)后面的元素統統往后移動一位。 6)將新的數據內容存放到數組的指定位置(index)上 * 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); } ``` * **get\(int index\)** ``` public E get(int index) { rangeCheck(index); return elementData(index); } ``` * **remove\(int index\)** 根據索引remove 1)判斷索引有沒有越界 2)自增修改次數 3)將指定位置(index)上的元素保存到oldValue 4)將指定位置(index)后的元素都往前移動一位 5)將最后面的一個元素置空,好讓垃圾回收器回收 6)將原來的值oldValue返回 ``` public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work return oldValue; } ``` _**注意:調用remove方法不會縮減數組的長度,只是將最后一個數組元素置空而已**_ * trimToSize\(\)縮小集合容量 * toArray\(\)將集合轉換為數組 * Arrays初始化 ``` List list = Arrays.asList("a", "b"); List list = new ArrayList(){}; ``` ### 知識點 * ArrayList自己實現了序列化和反序列化的方法,因為它自己實現了 private void writeObject\(java.io.ObjectOutputStream s\)和 private void readObject\(java.io.ObjectInputStream s\) 方法 * ArrayList基于數組方式實現,無容量的限制(會擴容) * 添加元素時可能要擴容(所以最好預判一下),刪除元素時不會減少容量(若希望減少容量,trimToSize\(\)),刪除元素時,將刪除掉的位置元素置為null,下次gc就會回收這些元素所占的內存空間。添加刪除某個索引的數據時,需要整體移動數組所以效率比較低 * 線程不安全 * add\(int index, E element\):添加元素到數組中指定位置的時候,需要將該位置及其后邊所有的元素都整塊向后復制一位 * get\(int index\):獲取指定位置上的元素時,可以通過索引直接獲取(O\(1\)) * remove\(Object o\)需要遍歷數組 * remove\(int index\)不需要遍歷數組,只需判斷index是否符合條件即可,效率比remove\(Object o\)高 * contains\(E\)需要遍歷數組 * 使用iterator遍歷可能會引發多線程異常 * 中文排序 ``` Collator collator = Collator.getInstance(Locale.CHINA); List list = Arrays.asList("羅友寶", "黃慧", "阿偉", "車曉"); Collections.sort(list, collator); list.stream().forEach(System.err::println); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看