您好,登錄后才能下訂單哦!
本篇文章為大家展示了Java 項目中如何實現自定義ArrayList,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Java 中模仿源碼自定義ArrayList
最近看了下ArrayList的源碼,抽空根據ArrayList的底層結構寫了一個功能簡單無泛型的自定義ArrayLsit,幫助自己更好理解ArrayList:,其實現的底層數據結構為數Object組,代碼如下:
/** * 自己實現一個ArrayList * */ public class MyArrayList { private Object[] elementData; private int size; public int size(){ return size; } public boolean isEmpty(){ return size==0; } //默認容量為10 public MyArrayList(){ this(10); } /** * 自定義容量 * @param initialCapacity */ public MyArrayList(int initialCapacity){ if(initialCapacity<0){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } elementData = new Object[initialCapacity]; } /** * 添加一個元素 * @param obj */ public void add(Object obj){ //數組擴容和數據的拷貝,重新new一個數組 if(size==elementData.length){ Object[] newArray = new Object[size*2+1]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } elementData[size++]=obj; // size++; } /** * 通過索引獲取元素 * @param index * @return */ public Object get(int index){ rangeCheck(index); return elementData[index]; } /** * 通過索引刪除元素 * @param index */ public void remove(int index){ rangeCheck(index); int numMoved = size - index - 1; if (numMoved > 0){ System.arraycopy(elementData, index+1, elementData, index, numMoved); } elementData[--size] = null; // Let gc do its work } /** * 刪除對應的元素(利用equal判斷元素是否一致) * @param obj */ public void remove(Object obj){ for(int i=0;i<size;i++){ if(get(i).equals(obj)){ //注意:底層調用的equals方法而不是==. remove(i); } } } /** * 設置索引對應的元素 * @param index * @param obj * @return */ public Object set(int index,Object obj){ rangeCheck(index); Object oldValue = elementData[index]; elementData[index] = obj; return oldValue; } /** * 將元素插入對應的位置 * @param index * @param obj */ public void add(int index,Object obj){ rangeCheck(index); ensureCapacity(); //數組擴容 System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = obj; size++; } /** * 數組擴容 */ private void ensureCapacity(){ //數組擴容和數據的拷貝 if(size==elementData.length){ Object[] newArray = new Object[size*2+1]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); // for(int i=0;i<elementData.length;i++){ // newArray[i] = elementData[i]; // } elementData = newArray; } } /** * 數組下標檢查 * @param index */ private void rangeCheck(int index){ if(index<0||index>=size){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { MyArrayList list = new MyArrayList(3); list.add("333"); list.add("444"); list.add("5"); list.add("344433"); list.add("333"); list.add("333"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("------------------------------"); list.remove("444"); list.add(2, "a"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
測試結果:
333 444 5 344433 333 333 ------------------------------ 333 5 a 344433 333 333
上述內容就是Java 項目中如何實現自定義ArrayList,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。