java數據結構-數組

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來增長或者減小其長度的。

相關文章
相關標籤/搜索