ArrayList相關的知識點也是java面試中最頻繁出現的點,下面從源碼的角度來分析下Arraylist!
1,ArrayList中的屬性:ArrayList中的屬性主要定義了一個對象數組(Object[]),大小(size),初始容量(DEFAULT_CAPACITY=10)等等,
2,ArrayList的主要方法:從下面截圖可以看出,ArrayList中的主要方法就是元素的add(增),remove(刪),set(改),get(查),而由這四大類方法自然衍生了獲取大小,擴容,清空,包含等方法!
下面就主要方法進行分析:
1,
①,先判斷加入元素后的數組大小,如果是小于初始容量則返回初始容量,否則返回+1后的容量值;②,容量加1,同時跟未加入元素時的數組length比較,如果大于length,則
③,intnewCapacity=oldCapacity+(oldCapacity>>1);>>
2,
①,先判斷是否下標越界,越界拋出異常,否則繼續
②,獲取到相應下標的元素;
③,將下標后面的元素使用System.arraycopy往前移動一位;④,將遺留出的最后一位置為null,讓GC進行回收,并返回②中獲得的值;
3,
記錄幾個ArrayList中碰到的坑:
1,線程不安全:所有的數據存取都是線程不安全的,所
2,Arraylist是實現了序列化接口的,但使用subList方法返回的是
3,使用remove方法遇到的坑,因為remove方法重載了兩個,remove(inti)和remove(Objecto),
可以說ArrayList是JAVA開發過程中最常使用的數據結構,底層實現也不難,但是如果不了解的話,面試容易被問倒,