1 數組的使用 java
聲明數組:就是告訴計算機數組的類型是什麼。有兩種形式:int[] array、int array[]。數組
分配空間:告訴計算機須要給該數組分配多少連續的空間,記住是連續的。array = new int[10];dom
賦值:賦值就是在已經分配的空間裏面放入數據。array[0] = 1 、array[1] = 2……其實分配空間和賦值是一塊兒進行的,也就是完成數組的初始化。有以下三種形式:工具
int a[] = new int[2]; //默認爲0,若是是引用數據類型就爲null
int b[] = new int[] {1,2,3,4,5};
int c[] = {1,2,3,4,5};
操做:就是對數組元素進行操做。經過數組名+有效的下標來確認數據。性能
2 數組底層spa
數組底層:普通的java類是以全限定路徑名+類名來做爲本身的惟一標示的,而數組則是以若干個[+L+數組元素類全限定路徑+類來最爲惟一標示的。
這個不一樣也許在某種程度上說明了數組也普通java類在實現上存在很大的區別,也許能夠利用這個區別來使得JVM在處理數組和普通java類時做出區分。
Object[]: class [Ljava.lang.Object; (一維數組)
Object: class java.lang.Object; (普通類)code
3 數組性能對象
一組數據進行求和運算,可將這些數據放到一個數組中,遍歷加和,也可將這些數據放到一個list中,遍歷求和,數組的性能顯而易見。blog
4 數組長度問題ci
數組是定長的,一旦初始化聲明後是不可改變長度的。那麼如何來實現變長數組呢?咱們能夠利用List集合add方法裏面的擴容思路來模擬實現。下面是ArrayList的擴容方法:
1 public void ensureCapacity(int minCapacity) { 2 modCount++; 3 int oldCapacity = elementData.length; 4 /** 5 * 若當前須要的長度超過數組長度時進行擴容處理 6 */ 7 if (minCapacity > oldCapacity) { 8 Object oldData[] = elementData; 9 int newCapacity = (oldCapacity * 3) / 2 + 1; //擴容 10 if (newCapacity < minCapacity) 11 newCapacity = minCapacity; 12 //拷貝數組,生成新的數組 13 elementData = Arrays.copyOf(elementData, newCapacity); 14 } 15 }
5 數組轉化爲list須要注意的地方
asList() 方法是Arrays的靜態方法,能夠將數組轉化爲List
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
注意這個參數:T…a,這個參數是一個泛型的變長參數,咱們知道基本數據類型是不可能泛型化的,也是就說8個基本數據類型是不可做爲泛型參數的。
可是若是將基本類型的數組轉換爲List也是不會報錯的。由於,在傳入參數的時候,是數組,數組在java 中會被當作對象,而對象是能夠泛型的。
因此咱們的程序是把一個int型的數組做爲了T的類型,因此在轉換以後List中就只會存在一個類型爲int數組的元素了。固然若是將int改成Integer,則長度就會變成5了。
當數組裝換成List 時,這個list 並非java.util.ArrayList 而是Arrays工具類的一個內部類:
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
/** 省略方法 **/
}
這個內部類ArrayList並無提升add的實現方法。在ArrayList中,它主要提供了以下幾個方法:
一、size:元素數量
二、toArray:轉換爲數組,實現了數組的淺拷貝。
三、get:得到指定元素。
四、contains:是否包含某元素。
因此綜上所述,asList返回的是一個長度不可變的列表。數組是多長,轉換成的列表是多長,咱們是沒法經過add、remove來增長或者減小其長度的。