java源碼: public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } } int newCapacity = (oldCapacity * 3)/2 + 1;
假設list初始化默認爲10
當第第10個被賦值時list是不會增加長度的,由於此時不須要開闢新的內存
當第11個時將執行會新開闢內存 (if (minCapacity > oldCapacity) 爲真 )
由於包含第11個,因此新增後數組長度則爲 10 + 10/2 + 1
可是實際上未賦值的爲5
也就是說每次開闢新內存時 都須要多開闢1爲當前賦值用
這裏明顯是50%+1.java
but此題不同sql
ArrayList的構造函數總共有三個: 數據庫
(1)ArrayList()構造一個初始容量爲 10 的空列表。 數組
(2)ArrayList(Collection<? extends E> c)構造一個包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。 函數
(3)ArrayList(int initialCapacity)構造一個具備指定初始容量的空列表。 調用的是第三個構造函數,直接初始化爲大小爲20的list,沒有擴容,因此選擇A ArrayList list=new ArrayList(); 這種是默認建立大小爲10的數組,每次擴容大小爲1.5倍 ArrayList list=new ArrayList(20); 這種是指定數組大小的建立,沒有擴充。this
--------------------------------------------------------------------------------------------------------------------------spa
橋接模式是結構型模式,關注點在依賴關係的維護。對於jdbc技術來講,它解耦了業務與數據庫通訊協議這兩個緯度之間的關係,因此這兩個緯度之間的關係就須要一個橋,即Driver,至於DriverManager把這個關係接到哪裏就是運行時的事情了。
微觀上,從connection的建立來看,它更像一個抽象工廠模式,特定的Driver建立對應的connection。
宏觀上,從業務代碼與connection的關係來看,關鍵點在於一個sql怎麼轉化爲對應的通訊協議,就屬於橋接blog
--------------------------------------------------------------------------------------------------------------------------接口
效率:System.arraycopy > clone > System.copyOf > for循環內存
--------------------------------------------------------------------------------------------------------------------------